RunwayML + Luma AI

Interaja com as APIs do RunwayML e Luma AI para tarefas de geração de vídeo e imagem.

Documentação

MseeP.ai Security Assessment Badge

Servidor MCP RunwayML + Luma AI

Este servidor MCP fornece ferramentas para interagir com as APIs RunwayML e Luma AI para tarefas de geração de vídeo e imagem.

Recursos

  • Gere vídeos a partir de prompts de texto (RunwayML ou Luma AI).
  • Gere vídeos a partir de imagens (RunwayML ou Luma AI).
  • Gere imagens a partir de prompts de texto (Luma AI).
  • Gerencie gerações do Luma AI (listar, obter, excluir).
  • Adicione áudio a gerações do Luma AI.
  • Aumente a resolução de gerações do Luma AI.
  • Aprimore prompts usando LLMs do OpenRouter antes da geração.

Pré-requisitos

  • Node.js (v18 LTS ou posterior recomendado)
  • npm (geralmente incluído com Node.js)
  • Chaves de API:
    • Segredo da API RunwayML
    • Chave da API Luma AI
    • Chave da API OpenRouter (para a ferramenta enhance_prompt)

Instalação

  1. Clone ou Baixe: Obtenha o código do servidor.
  2. Navegue até o Diretório: Abra um terminal no diretório raiz do servidor (runwayml-mcp-server).
  3. Instale as Dependências:
    npm install
    

Configuração

  1. Crie o arquivo .env: No diretório raiz do servidor, crie um arquivo chamado .env.
  2. Adicione as Chaves de API: Adicione suas chaves de API ao arquivo .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
    
    Substitua os valores de espaço reservado pelas suas chaves reais.

Executando o Servidor

  1. Compile o Servidor: Compile o código TypeScript:
    npm run build
    
  2. Inicie o Servidor:
    npm start
    
    Você deve ver uma mensagem como RunwayML MCP server running on stdio na saída de erro do seu terminal (stderr).

Configuração do Cliente MCP (ex.: Claude Desktop App, Cline)

Configure seu cliente MCP para conectar a este servidor. Os passos exatos dependem do cliente, mas normalmente você precisará fornecer:

  • Nome: Um nome descritivo (ex.: runway-luma-server)
  • Comando: node
  • Argumentos: O caminho completo para o arquivo index do servidor compilado (ex.: /path/to/your/runwayml-mcp-server/build/server-index.js)
  • Variáveis de Ambiente:
    • RUNWAYML_API_SECRET: Seu segredo da API RunwayML
    • LUMAAI_API_KEY: Sua chave da API Luma AI
    • OPENROUTER_API_KEY: Sua chave da API OpenRouter

Exemplo de Configuração (Conceitual):

{
  "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": []
    }
  }
}

(Lembre-se de substituir /full/path/to/ pelo caminho real no seu sistema)

Ferramentas Disponíveis

  • generate_text_to_video: Gera vídeo a partir de texto.
    • provider: (Opcional) runwayml (padrão) ou lumaai.
    • promptText: (Obrigatório) O prompt de texto.
    • runway_model: (Opcional) Modelo Runway (ex.: "gen-2").
    • runway_resolution: (Opcional) Resolução Runway (1280:768 ou 768:1280).
    • runway_watermark: (Opcional) Booleano, padrão false.
    • luma_model: (Opcional) Modelo Luma (ray-flash-2, ray-2 (padrão), ray-1-6).
    • luma_aspect_ratio: (Opcional) Proporção de aspecto Luma (ex.: 16:9 (padrão), 1:1).
    • luma_loop: (Opcional) Booleano.
    • duration: (Opcional) Duração do vídeo em segundos (número).
    • seed: (Opcional) Semente de geração (número).
  • generate_image_to_video: Gera vídeo a partir de uma imagem.
    • provider: (Opcional) runwayml (padrão) ou lumaai.
    • promptImage: (Obrigatório) URL da imagem de entrada, ou para Runway, um array [{uri: "url", position: "first" | "last"}].
    • promptText: (Opcional) Prompt de texto para acompanhar a imagem.
    • runway_model: (Opcional) Modelo Runway (gen3a_turbo (padrão)).
    • runway_duration: (Opcional) Duração Runway (5 (padrão) ou 10).
    • runway_ratio: (Opcional) Resolução Runway (1280:768 ou 768:1280).
    • runway_watermark: (Opcional) Booleano, padrão false.
    • luma_model: (Opcional) Modelo Luma (ray-flash-2, ray-2 (padrão), ray-1-6).
    • luma_aspect_ratio: (Opcional) Proporção de aspecto Luma (ex.: 16:9 (padrão)).
    • luma_loop: (Opcional) Booleano.
    • seed: (Opcional) Semente de geração (número).
  • enhance_prompt: Refina um prompt usando OpenRouter.
    • original_prompt: (Obrigatório) O prompt a ser aprimorado.
    • model: (Opcional) Nome do modelo OpenRouter (padrão é um modelo capaz como anthropic/claude-3.5-sonnet).
    • instructions: (Opcional) Instruções específicas para o aprimoramento.
  • luma_generate_image: Gera uma imagem usando Luma AI.
    • prompt: (Obrigatório) Prompt de texto.
    • aspect_ratio: (Opcional) Proporção de aspecto Luma (16:9 (padrão)).
    • model: (Opcional) Modelo de imagem Luma (photon-1 (padrão), photon-flash-1).
    • image_ref: (Opcional) Array de objetos de referência de imagem ({url: string, weight?: number}). Máx. 4.
    • style_ref: (Opcional) Array de objetos de referência de estilo ({url: string, weight?: number}). Máx. 1.
    • character_ref: (Opcional) Objeto de referência de personagem ({ identity0: { images: [url1, ...] } }).
    • modify_image_ref: (Opcional) Objeto de referência de modificação de imagem ({url: string, weight?: number}).
  • luma_list_generations: Lista gerações anteriores do Luma AI.
    • limit: (Opcional) Número de resultados (padrão 10).
    • offset: (Opcional) Deslocamento para paginação (padrão 0).
  • luma_get_generation: Obtém detalhes de uma geração específica do Luma AI.
    • generation_id: (Obrigatório) UUID da geração.
  • luma_delete_generation: Exclui uma geração específica do Luma AI.
    • generation_id: (Obrigatório) UUID da geração.
  • luma_get_camera_motions: Lista movimentos de câmera suportados para prompts do Luma AI. (Sem parâmetros).
  • luma_add_audio: Adiciona áudio a uma geração Luma.
    • generation_id: (Obrigatório) UUID da geração.
    • prompt: (Obrigatório) Prompt para o áudio.
    • negative_prompt: (Opcional) Prompt negativo para áudio.
  • luma_upscale: Aumenta a resolução de uma geração Luma.
    • generation_id: (Obrigatório) UUID da geração.
    • resolution: (Opcional) Resolução alvo (1080p (padrão) ou 4k).

(Nota: Para ferramentas que envolvem geração (generate_*, luma_upscale), o servidor inicia a tarefa e retorna imediatamente. Atualizações de progresso e a URL do resultado final serão enviadas via notificações de progresso do MCP.)

Exemplos de Fluxos de Trabalho

Aqui estão exemplos de como combinar as ferramentas do servidor para casos de uso comuns:

1. Trecho de Videoclipe (Cyberpunk Noir)

Objetivo: Criar um clipe de vídeo cyberpunk noir de 5 segundos para a letra "Neon rivers flowing through a city of chrome".

Passos:

  1. Gere a Imagem 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"
      }
    }
    

    (Aguarde a conclusão da geração da imagem e obtenha a URL da imagem)

  2. Anime a Imagem (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
      }
    }
    

    (Aguarde a conclusão da geração do vídeo)

2. Conceito de Anúncio de Produto (Fone Flutuante)

Objetivo: Criar um vídeo de 5 segundos mostrando um fone futurista flutuando em um ambiente minimalista.

Passos:

  1. Gere a Cena com Referência do Produto (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 }]
      }
    }
    

    (Aguarde a conclusão da geração da imagem e obtenha a URL da imagem)

  2. Anime a Cena (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
      }
    }
    

    (Aguarde a conclusão da geração do vídeo)

3. Animação de Imagem (RunwayML Gen3a)

Objetivo: Animar uma imagem existente usando o modelo Gen3a do RunwayML.

Passos:

  1. (Opcional) Gere a Imagem Base (Luma): Use luma_generate_image se você não tiver uma imagem.
  2. Anime a Imagem (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"
      }
    }
    
    (Aguarde a conclusão da geração do vídeo)