Runway Gen-4 모션 브러시 사용법: AI 영상 카메라·피사체 움직임 정밀 제어 가이드
Runway Gen-4 모션 브러시란?
Runway Gen-4의 모션 브러시(Motion Brush)는 AI 영상 생성 시 특정 영역의 움직임 방향과 강도를 직접 지정할 수 있는 고급 제어 도구입니다. 기존 텍스트 프롬프트만으로는 불가능했던 정밀한 카메라 워크와 피사체별 개별 모션 제어를 시각적 인터페이스로 구현합니다.
사전 준비 및 환경 설정
1단계: Runway 계정 및 API 설정
- Runway 계정 생성:
runwayml.com에서 Pro 또는 Unlimited 플랜에 가입합니다. 모션 브러시는 유료 플랜 전용 기능입니다.- API 키 발급: 대시보드 → Settings → API Keys에서 키를 생성합니다.- Python SDK 설치:pip install runwayml pip install runwayml —upgrade # 최신 버전 유지 권장
2단계: API 인증 구성
import runwayml
client = runwayml.RunwayML(
api_key="YOUR_API_KEY"
)
# 연결 테스트
print(client.account.retrieve())환경 변수로 관리하려면:
# .env 파일
RUNWAYML_API_SECRET=YOUR_API_KEY
import os from dotenv import load_dotenv import runwayml
load_dotenv() client = runwayml.RunwayML( api_key=os.environ[“RUNWAYML_API_SECRET”] )
모션 브러시 핵심 워크플로우
3단계: 기본 영상 생성 요청
모션 브러시를 사용하기 전, 먼저 기본 이미지-투-비디오 태스크를 생성합니다.
task = client.image_to_video.create(
model="gen4",
prompt_image="https://your-storage.com/scene.png",
prompt_text="cinematic ocean sunset with gentle waves",
duration=10,
ratio="1280:768"
)
print(f"Task ID: {task.id}")
### 4단계: 모션 브러시 영역 정의
모션 브러시는 JSON 형식의 영역(region) 배열로 움직임을 지정합니다. 각 영역은 마스크 좌표, 방향 벡터, 강도를 포함합니다.
motion_config = {
"regions": [
{
"mask": {
"type": "bbox",
"x": 0.1,
"y": 0.3,
"width": 0.25,
"height": 0.4
},
"direction": {"x": 0.8, "y": -0.2},
"intensity": 0.7,
"label": "subject_person"
},
{
"mask": {
"type": "bbox",
"x": 0.5,
"y": 0.0,
"width": 0.5,
"height": 1.0
},
"direction": {"x": -0.3, "y": 0.0},
"intensity": 0.4,
"label": "background_clouds"
}
]
}
task = client.image_to_video.create(
model=“gen4”,
prompt_image=“https://your-storage.com/scene.png”,
prompt_text=“person walking through field, clouds drifting”,
duration=10,
ratio=“1280:768”,
motion_brush=motion_config
)
5단계: 카메라 모션 제어
카메라 움직임은 별도의 camera_motion 파라미터로 모션 브러시와 결합할 수 있습니다.
task = client.image_to_video.create(
model="gen4",
prompt_image="https://your-storage.com/cityscape.png",
prompt_text="busy city street at golden hour",
duration=10,
ratio="1280:768",
camera_motion={
"type": "combined",
"pan": {"x": 0.3, "y": 0.0},
"zoom": 0.15,
"tilt": -0.05
},
motion_brush=motion_config
)
### 모션 파라미터 참조 테이블
| 파라미터 | 범위 | 설명 |
|---|---|---|
direction.x | -1.0 ~ 1.0 | 수평 이동 (양수: 오른쪽, 음수: 왼쪽) |
direction.y | -1.0 ~ 1.0 | 수직 이동 (양수: 아래, 음수: 위) |
intensity | 0.0 ~ 1.0 | 움직임 강도 (0.3~0.7 권장) |
camera_motion.pan | -1.0 ~ 1.0 | 카메라 수평/수직 패닝 |
camera_motion.zoom | -1.0 ~ 1.0 | 줌 인(양수) / 줌 아웃(음수) |
camera_motion.tilt | -1.0 ~ 1.0 | 카메라 틸트 각도 |
import time
while True: status = client.tasks.retrieve(task.id) if status.status == “SUCCEEDED”: print(f”영상 URL: {status.output[0]}”) break elif status.status == “FAILED”: print(f”오류: {status.failure}”) break time.sleep(5)
Pro Tips: 파워 유저를 위한 고급 기법
- 다중 레이어 모션: 최대 5개 영역을 겹쳐 사용하면 전경·중경·배경의 시차(parallax) 효과를 만들 수 있습니다. 전경
intensity: 0.8, 배경intensity: 0.2로 설정하세요.- 정지 영역 고정: 움직이지 않아야 할 영역에intensity: 0.0을 지정하면 AI가 해당 부분을 자동으로 왜곡하는 것을 방지합니다.- 프롬프트-모션 일관성: 텍스트 프롬프트의 움직임 묘사와 모션 브러시 방향이 일치해야 자연스러운 결과를 얻습니다. 상충하면 아티팩트가 발생합니다.- 시드 고정으로 반복 테스트:seed파라미터를 고정하고 모션 값만 변경하면 움직임 차이를 정확히 비교할 수 있습니다.- 배치 자동화: 여러 모션 구성을 배열로 만들어 반복문으로 대량 생성하면 최적 설정을 빠르게 탐색할 수 있습니다.configs = [ {“intensity”: 0.3, “direction”: {“x”: 0.5, “y”: 0.0}}, {“intensity”: 0.6, “direction”: {“x”: 0.5, “y”: 0.0}}, {“intensity”: 0.9, “direction”: {“x”: 0.5, “y”: 0.0}}, ]
task_ids = []
for cfg in configs:
motion = {“regions”: [{“mask”: {“type”: “bbox”, “x”: 0.2, “y”: 0.2, “width”: 0.3, “height”: 0.5}, **cfg}]}
t = client.image_to_video.create(
model=“gen4”,
prompt_image=“https://your-storage.com/test.png”,
prompt_text=“dancer spinning slowly”,
duration=5,
motion_brush=motion,
seed=42
)
task_ids.append(t.id)
print(f”생성된 태스크 {len(task_ids)}개: {task_ids}“)
Troubleshooting: 자주 발생하는 오류 해결
| 오류 메시지 | 원인 | 해결 방법 |
|---|---|---|
INVALID_MOTION_REGION | 마스크 좌표가 0~1 범위를 초과 | 모든 좌표값이 0.0~1.0 사이인지 확인 |
RATE_LIMIT_EXCEEDED | 분당 API 요청 한도 초과 | 요청 간 time.sleep(10) 추가 또는 플랜 업그레이드 |
MOTION_CONFLICT | 카메라 모션과 브러시 방향 충돌 | 카메라 pan 방향과 피사체 모션 방향의 정합성 확인 |
| 결과 영상 떨림(jitter) | intensity 값이 너무 높음 | 0.3~0.6 범위로 낮추고 재생성 |
| 피사체 형태 왜곡 | 영역 마스크가 너무 작거나 부정확 | 마스크를 피사체보다 10~15% 크게 설정 |
Q1: 모션 브러시는 무료 플랜에서도 사용할 수 있나요?
아니요. 모션 브러시는 Runway Pro 플랜 이상에서만 사용 가능합니다. Standard 플랜에서는 기본 카메라 모션만 지원되며, 영역별 개별 제어는 Pro 또는 Unlimited 플랜이 필요합니다.
Q2: 모션 브러시 영역은 최대 몇 개까지 설정할 수 있나요?
현재 Gen-4에서는 한 영상당 최대 5개의 모션 브러시 영역을 동시에 적용할 수 있습니다. 영역이 많아질수록 GPU 처리 시간이 증가하므로, 핵심 피사체 2~3개에 집중하는 것이 품질과 속도 면에서 최적입니다.
Q3: 웹 UI의 모션 브러시와 API 모션 브러시는 동일한 결과를 내나요?
기본적으로 동일한 엔진을 사용하지만, 웹 UI에서는 브러시 스트로크 형태의 자유 곡선 마스크를 지원하는 반면 API에서는 bbox(사각형) 기반 영역 지정이 기본입니다. 복잡한 형태의 마스크가 필요하면 웹 UI에서 먼저 테스트한 후 API로 자동화하는 하이브리드 접근을 권장합니다.