런웨이 & 루마 AI API

1. 런웨이 AI 

개발자와 조직이 회사의 생성 AI 모델을 타사 플랫폼, 앱 및 서비스에 구축할 수 있도록 하는 API를 처음으로 출시했다. API로 서비스되는 모델은 Gen-3 alpha와 경량 모델인 Gen-3 alpha turbo이다.  현재 API는 제한적으로 공개되어 있으며 아래의 링크를 통해 대기자 명단에 등록할 수 있다 

API 대기자 등록 링크 : https://docs.google.com/forms/d/e/1FAIpQLSedGRW6C5G8k4FTZHvB-OvMF1FJ3aqmzNOSCDkVa3XInogkxA/viewform

 

Use our API platform to get access to our latest and most powerful video models inside a safe and reliable environment.

We'll get you off the waitlist as soon as possible, and send you a direct email when you have access.

docs.google.com

또한 런웨이 AI의 API를 활용하는 모든 사이트의 경우, '파워드 바이 런웨이(Powered by Runway)' 를 표시해야한다. 

 

1) 사용 방법

 

(1) 이미지를 활용하여 동영상 생성하는 방법

이미지를 활용하여 동영상을 생성하기 위해서는 아래의 python 코드와 같이 POST 요청을 보내면 된다:

import httpx

response = httpx.post(
  "https://api.dev.runwayml.com/v1/image_to_video",
  json={
    "promptImage": "http://example.com",
    "model": "gen3a_turbo"
  },
  headers={
    "Authorization": "Bearer {{ YOUR API KEY }}",
    "X-Runway-Version": "2024-09-13",
  },
)
response.raise_for_status()

 

이 요청에는 다음과 같은 매개변수들이 포함된다:

  • promptImage: HTTPS URL로, JPEG, PNG, WebP 형식의 16MB 이하 이미지여야 한다.
  • model: 사용할 모델 변형. 현재는 "gen3a_turbo"만 지원한다.
  • seed: 결과의 다양성을 위한 시드 값 (선택사항)
  • promptText: 출력물에 대한 상세 설명 (선택사항, 최대 512자)
  • watermark: 워터마크 포함 여부 (기본값: false)

Response는 다음과 같다.

- 200 : 성공적으로 제출되었음 

{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

- 429 : API 사용량 제한에 도달하였음

 

(2) 작업 상태 확인하기 

앞에서 생성한 작업의 상태를 확인하려면 다음과 같은 GET 요청을 보내면 된다:

* 작업을 제출할 때 Response를 통해 받은 id 값 필요

import httpx

response = httpx.get(
  "https://api.dev.runwayml.com/v1/tasks/{id}",
  headers={
    "Authorization": "Bearer {{ YOUR API KEY }}",
    "X-Runway-Version": "2024-09-13",
  },
)
response.raise_for_status()

 

Response는 다음과 같다.

- 200

  • PENDING: 작업이 대기 중
{
"id": "17f20503-6c24-4c16-946b-35dbbce2af2f",
"status": "PENDING",
"createdAt": "2024-06-27T19:49:32.334Z"
}
  • THROTTLED: 작업이 제한되어 대기 중

 

{
"id": "355e42da-b3f9-4b65-9be2-fb10bda026fc",
"status": "THROTTLED",
"createdAt": "2024-06-27T19:49:32.335Z"
}
  • RUNNING: 작업이 실행 중
{
"id": "08388106-1b46-4f5c-bd46-1c1d7ee86892",
"status": "RUNNING",
"createdAt": "2024-06-27T19:49:32.335Z",
"progress": 0.2
}
  • SUCCEEDED: 작업이 성공적으로 완료됨
{
"id": "d2e3d1f4-1b3c-4b5c-8d46-1c1d7ee86892",
"status": "SUCCEEDED",
"createdAt": "2024-06-27T19:49:32.335Z",
"output": [
"https://example.com/output1.jpg",
"https://example.com/output2.jpg"
]
}
  • FAILED: 작업이 실패함
{
"id": "6da960dd-ef88-40fc-9628-02e9b6a6a008",
"status": "FAILED",
"createdAt": "2024-06-27T19:49:32.335Z",
"failure": "The provided image was flagged by content moderation.",
"failureCode": "SAFETY.INPUT.IMAGE"
}

 

- 404 : 작업이 삭제 혹은 취소되었음

 

(3) 작업 취소 또는 삭제하기

실행 중이거나 대기 중인 작업을 취소하거나 삭제하려면 다음과 같은 DELETE 요청을 보내면 된다:

* (2)와 마찬가지로 작업 생성시, id 필요

import httpx

response = httpx.delete(
  "https://api.dev.runwayml.com/v1/tasks/{id}",
  headers={
    "Authorization": "Bearer {{ YOUR API KEY }}",
    "X-Runway-Version": "2024-09-13",
  },
)
response.raise_for_status()

 

Response는 다음과 같다.

204: 성공적으로 작업이 취소 혹은 삭제되었다.

 

2. Ruma AI

런웨이 AI에 이어서 동영상 생성 API를 출시했다. RUMA AI의 경우, 런웨이와는 다르게 대기자 명단 없이 사용할 수 있다.

 

1) 사용방법

우선, lumaai 라이브러리를 설치해야 한다.

pip install lumaai

또한 인증을 위해 API 키(https://lumalabs.ai/dream-machine/api/keys)를 발급받아야 한다.

 

- 환경 변수를 사용한 경우, 

from lumaai import LumaAI

client = LumaAI()

 

- 환경 변수를 사용하지 않은 경우, 

import os
from lumaai import LumaAI

client = LumaAI(
    auth_token=os.environ.get("LUMAAI_API_KEY"),
)

 

(1) 텍스트를 활용하여 동영상 생성하기 

 

텍스트 프롬프트를 사용하여 동영상을 생성할 수 있다

generation = client.generations.create(
    prompt="A teddy bear in sunglasses playing electric guitar and dancing",
)

 

(2) 루프와 화면 비율을 지정

* 동영상의 끝이 시작으로 연결되도록 하는 것 

generation = client.generations.create(
    prompt="A teddy bear in sunglasses playing electric guitar and dancing",
    loop=True,
    aspect_ratio="3:4"
)

 

(3) 이미지를 활용한 동영상 생성

동영상의 첫 프레임 혹은 마지막 프레임을 지정할 수 있다.

generation = client.generations.create(
    prompt="Low-angle shot of a majestic tiger prowling through a snowy landscape, leaving paw prints on the white blanket",
    keyframes={
      "frame0": {
        "type": "image",
        "url": "https://example.com/start_image.jpg"
      }
    }
)

 

(4) 동영상 확장 및 보간

이미 생성된 동영상을 확장하거나 두 동영상 사이를 보간할 수 있다.

generation = client.generations.create(
    prompt="A teddy bear in sunglasses playing electric guitar and dancing",
    keyframes={
      "frame0": {
        "type": "generation",
        "id": "기존_생성_ID"
      }
    }
)

 

(5) 기타 기능

 

#생성된 동영상 정보 조회
client.generations.get(id="생성_ID")

#생성 목록 조회
client.generations.list(limit=100, offset=0)

#생성 삭제
client.generations.delete(id="생성_ID")

#지원되는 카메라 모션 목록 조회
client.generations.camera_motion.list()

 

(6) 가격

  • 기준 가격: $0.0032 / 1M 생성된 픽셀
  • 프레임 속도: 24fps (초당 24프레임)
  • 해상도: 720p (1280×720 픽셀)
  • 예시 계산
    • 5초 길이의 720p 해상도 비디오를 생성할 경우의 가격을 계산하면,
    • 한 프레임당 픽셀 수: 1280 × 720 = 921,600 픽셀
      • 프레임당 가격: $0.0032 (1프레임은 약 1M 픽셀에 해당)
      • 총 프레임 수: 5초 × 24fps = 120 프레임
      • 총 가격: $0.0032 × 120 ≈ $0.4

따라서 5초 길이의 24fps, 720p 해상도 비디오를 생성하는 데 약 $0.4의 비용이 든다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유