1. 런웨이 AI
개발자와 조직이 회사의 생성 AI 모델을 타사 플랫폼, 앱 및 서비스에 구축할 수 있도록 하는 API를 처음으로 출시했다. API로 서비스되는 모델은 Gen-3 alpha와 경량 모델인 Gen-3 alpha turbo이다. 현재 API는 제한적으로 공개되어 있으며 아래의 링크를 통해 대기자 명단에 등록할 수 있다
API 대기자 등록 링크 : https://docs.google.com/forms/d/e/1FAIpQLSedGRW6C5G8k4FTZHvB-OvMF1FJ3aqmzNOSCDkVa3XInogkxA/viewform
또한 런웨이 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의 비용이 든다.
'A.I.(인공지능) & M.L.(머신러닝)' 카테고리의 다른 글
Sana: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformer (1) | 2024.12.02 |
---|---|
CogVideoX (0) | 2024.09.04 |