Novita AI의 Wan 2.7 VideoEdit API: AI로 비디오 편집하는 방법

Novita AI의 Wan 2.7 VideoEdit API: AI로 비디오 편집하는 방법

Wan 2.7 VideoEdit on Novita AI는 이미 촬영된 영상이 있고, 모션을 처음부터 다시 만들지 않고 장면을 재구성하거나 다시 쓰려고 할 때 적합한 엔드포인트입니다. 소스 비디오를 POST https://api.novita.ai/v3/async/wan2.7-videoedit에 제출하면 task_id를 반환받고, 편집된 클립이 준비될 때까지 GET /v3/async/task-result를 폴링합니다. 이 가이드는 정확한 요청 형태, 참조 이미지를 추가해야 하는 경우, 그리고 프로덕션에 적용하기 전에 알아야 할 구현 세부 사항을 보여줍니다.

Wan 2.7 VideoEdit이 적합한 경우

소스 클립의 타이밍과 카메라 움직임이 이미 충분히 좋고, 샷의 구도가 아닌 시청자가 보는 내용을 AI가 변경하기를 원할 때 Wan 2.7 VideoEdit을 사용하세요.

일반적으로 적합한 경우:

  • 실사 클립이 있고 이를 애니메이션, 시네마틱 또는 스타일화된 렌더링으로 변환하려는 경우.
  • 원래 모션 흐름은 유지하면서 의상, 환경, 소품 또는 분위기를 변경해야 하는 경우.
  • 영상에 프롬프트 기반 변환을 적용하고 참조 이미지로 룩을 고정하려는 경우.

다음과 같은 경우에는 적합하지 않습니다:

  • 텍스트만으로 완전히 새로운 모션이 필요하다면 Wan 2.7 T2V를 대신 사용하세요.
  • 정지 이미지를 애니메이션화하려면 Wan 2.7 I2V를 대신 사용하세요.
  • 생성된 장면 전체에서 명명된 참조 슬롯을 사용한 다중 캐릭터 롤플레이가 필요하다면 Wan 2.7 R2V를 대신 사용하세요.

이 구분이 중요한 이유는 VideoEdit이 입력 클립에서 시작하기 때문입니다. 원본 모션이 잘못된 경우 모델이 안무를 수정해주지 않습니다.

검증된 엔드포인트 및 워크플로우

Novita AI의 Wan 2.7 VideoEdit은 하나의 제출 엔드포인트와 공유 비동기 태스크 결과 엔드포인트를 사용합니다:

필드
제출 엔드포인트 POST https://api.novita.ai/v3/async/wan2.7-videoedit
결과 폴링 GET https://api.novita.ai/v3/async/task-result?task_id=<id>
인증 헤더 Authorization: Bearer $NOVITA_API_KEY
콘텐츠 타입 application/json
공식 문서 Wan 2.7 VideoEdit API 참조

API는 비동기 방식입니다. 성공적인 제출 호출은 완성된 비디오 URL이 아닌 task_id를 반환합니다. 애플리케이션은 해당 태스크 ID를 유지하고 그 주변에 폴링 또는 백그라운드 작업 로직을 구축해야 합니다.

1단계: Novita AI API 키 받기

Novita AI 키 관리에서 키를 생성하고 환경 변수에 보관하세요:

export NOVITA_API_KEY="your_api_key_here"

브라우저 코드, 모바일 앱 또는 체크인된 구성 파일에 키를 하드코딩하지 마세요.

2단계: 요청 구조 이해하기

Wan 2.7 VideoEdit은 플랫 JSON 본문을 사용합니다. 요청은 input 또는 parameters 아래에 필드를 중첩하지 않습니다.

최소한 다음을 전송하세요:

  • video_url
  • prompt

일반적으로 먼저 신경 써야 할 문서화된 선택적 필드는 다음과 같습니다:

  • reference_image_url (룩/스타일 참조용)
  • resolution
  • duration
  • audio_setting
  • prompt_extend
  • seed

3단계: 첫 번째 VideoEdit 요청 제출하기

다음은 가장 작은 실용적인 요청입니다:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "Turn this office hallway scene into a neon cyberpunk corridor, preserve the walking motion and camera path",
    "resolution": "720P",
    "duration": 5
  }'

예상 응답:

{
  "task_id": "abc123..."
}

제출 시점에는 다른 어떤 것도 보장되지 않습니다. 요청을 동기 편집 응답이 아닌 작업 대기열 단계로 취급하세요.

4단계: 태스크 결과 엔드포인트 폴링하기

반환된 task_id를 공유 태스크 결과 API와 함께 사용하세요:

curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
  -H "Authorization: Bearer $NOVITA_API_KEY"

다음 상태를 기준으로 구축하세요:

상태 의미
TASK_STATUS_QUEUED 수락됨, 실행 대기 중
TASK_STATUS_PROCESSING 편집 진행 중
TASK_STATUS_SUCCEED 편집된 비디오 준비 완료
TASK_STATUS_FAILED 태스크 실패, 응답 본문 확인

태스크가 성공하면 응답에는 편집된 출력 URL과 URL TTL이 포함된 videos 배열이 포함됩니다. 호스팅된 URL을 영구 저장소로 취급하지 말고 신속하게 에셋을 다운로드하거나 이동하세요.

5단계: 더 세밀한 시각적 제어가 필요할 때 참조 이미지 추가하기

reference_image_url은 선택 사항이지만 유용한 방식으로 편집 동작을 변경합니다.

다음과 같은 경우에 사용하세요:

  • 최종 클립이 특정 캐릭터 룩, 의상 또는 팔레트를 따르길 원하는 경우.
  • 텍스트 프롬프트에 모든 것을 맡기는 대신 특정 아트 방향으로 출력을 유도하려는 경우.
  • 소스 비디오 모션은 올바르지만 텍스트 전용 안내로는 장면 정체성이 너무 모호한 경우.

참조 이미지가 포함된 요청 예시:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "reference_image_url": "https://example.com/reference-look.png",
    "prompt": "Transform the performer into the look and color palette of the reference image while keeping the same dance timing",
    "resolution": "1080P",
    "duration": 6,
    "audio_setting": "auto"
  }'

결과가 계속 표류한다면 일반적인 해결책은 더 긴 프롬프트가 아닙니다. 더 정확한 프롬프트와 더 나은 참조 이미지입니다.

실제로 신경 써야 할 주요 파라미터

파라미터 타입 필수 설명
video_url string 편집할 소스 비디오
prompt string 대상 변환 설명
reference_image_url string 아니오 룩 및 스타일 고정을 위한 참조 이미지
resolution string 아니오 출력 해상도, 문서화된 값은 720P1080P
duration integer 아니오 대상 출력 길이(초), 0은 전체 입력 비디오 길이 유지
audio_setting string 아니오 오디오 생성 동작 제어
prompt_extend boolean 아니오 모델이 짧은 프롬프트를 자동으로 확장하도록 허용
seed integer 아니오 재시도 간 재현성 향상

기본값을 가정하기 전에 공식 파라미터 참조를 확인하세요. 비디오 모델 필드는 텍스트 모델 필드보다 더 자주 변경되며, 메모리에 의존하면 출력 제약 조건을 쉽게 잘못 설정할 수 있습니다.

문서화된 제한 사항 및 실용적인 제약 조건

2026년 7월 29일 기준, Novita의 Wan 2.7 VideoEdit 공식 문서에는 다음과 같은 경계가 명시되어 있습니다:

  • 지원 해상도: 720P1080P
  • duration 기본값은 0이며, 이는 전체 입력 비디오 길이를 의미합니다. 설정 시 문서화된 명시적 출력 지속 시간 범위는 2~10초입니다.
  • 입력 비디오 형식: mp4mov
  • 입력 비디오 크기 제한: 최대 100 MB
  • 참조 이미지 형식: jpg, jpeg, png, webp
  • 참조 이미지 크기 제한: 최대 20 MB
  • 출력 비디오 형식: mp4

제네릭 미디어 파이프라인을 구축할 때 이러한 제약 조건을 놓치기 쉽습니다. 가장 일반적인 통합 실패는 엔드포인트가 허용하는 것보다 더 길거나 더 큰 소스 파일을 보내는 것입니다.

두 가지 실용적인 의미:

  1. 편집된 클립이 소스 길이를 유지하길 원한다면 duration을 생략하거나 0으로 설정하고 2~10초 트림을 강제하지 마세요.
  2. 프롬프트를 빠르게 테스트하는 경우 먼저 720P를 사용하고 변환이 작동할 때만 1080P로 이동하세요.

Python 예제: 제출 및 폴링

import os
import time
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}


def submit_video_edit(
    video_url: str,
    prompt: str,
    reference_image_url: str | None = None,
    resolution: str = "720P",
    duration: int = 0,
    audio_setting: str = "auto",
    prompt_extend: bool = True,
    seed: int | None = None,
) -> str:
    payload = {
        "video_url": video_url,
        "prompt": prompt,
        "resolution": resolution,
        "duration": duration,
        "audio_setting": audio_setting,
        "prompt_extend": prompt_extend,
    }
    if reference_image_url:
        payload["reference_image_url"] = reference_image_url
    if seed is not None:
        payload["seed"] = seed

    resp = requests.post(
        f"{BASE_URL}/v3/async/wan2.7-videoedit",
        headers=HEADERS,
        json=payload,
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()["task_id"]


def poll_result(task_id: str, interval: int = 5, timeout: int = 300) -> dict:
    deadline = time.time() + timeout
    while time.time() < deadline:
        resp = requests.get(
            f"{BASE_URL}/v3/async/task-result",
            headers=HEADERS,
            params={"task_id": task_id},
            timeout=60,
        )
        resp.raise_for_status()
        data = resp.json()
        status = data.get("task", {}).get("status")

        if status == "TASK_STATUS_SUCCEED":
            return data
        if status == "TASK_STATUS_FAILED":
            reason = data.get("task", {}).get("reason", "unknown")
            raise RuntimeError(f"Task {task_id} failed: {reason}")

        time.sleep(interval)

    raise TimeoutError(f"Task {task_id} did not complete within {timeout}s")


if __name__ == "__main__":
    task_id = submit_video_edit(
        video_url="https://example.com/source-clip.mp4",
        prompt="Change the street scene into a rainy retro-futurist city at night, preserve the original tracking shot",
        reference_image_url="https://example.com/reference-frame.png",
        resolution="720P",
        duration=0,
        seed=42,
    )
    print(f"Submitted task: {task_id}")

    result = poll_result(task_id)
    video = result["videos"][0]
    print("Edited video URL:", video["video_url"])
    print("URL TTL:", video["video_url_ttl"])

셸 폴링을 사용한 cURL 예제

TASK_ID=$(curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "Convert the clip into a hand-drawn anime city scene, preserve the running motion",
    "resolution": "720P",
    "duration": 0,
    "prompt_extend": true
  }' | jq -r '.task_id')

while true; do
  RESULT=$(curl -s "https://api.novita.ai/v3/async/task-result?task_id=$TASK_ID" \
    -H "Authorization: Bearer $NOVITA_API_KEY")
  STATUS=$(echo "$RESULT" | jq -r '.task.status')

  if [ "$STATUS" = "TASK_STATUS_SUCCEED" ]; then
    echo "$RESULT" | jq -r '.videos[0].video_url'
    break
  fi

  if [ "$STATUS" = "TASK_STATUS_FAILED" ]; then
    echo "$RESULT"
    break
  fi

  sleep 5
done

백엔드 서비스에서 통합하는 경우 전체 생성 시간 동안 사용자 요청을 열어두지 말고 이 폴링 루프를 워커로 감싸세요.

가격, 크레딧 및 비용 추정 전 확인 사항

Novita AI는 모델 및 가격 페이지에서 비디오 모델의 가격을 공개하지만 이 숫자는 변경될 수 있습니다. Wan 2.7 VideoEdit의 경우 고객 대상 비용 견적을 게시하기 전에 Novita AI 가격 페이지와 공식 문서에 연결된 모델 항목에서 현재 요금을 직접 확인하세요.

엔지니어링 계획을 위한 더 안전한 가정은 다음과 같습니다:

  • 비용은 단일 고정 요청 수수료가 아니라 생성된 클립 설정에 따라 달라집니다.
  • 1080P 실행은 반복 작업의 기준선으로 적합하지 않습니다.
  • 더 짧은 클립은 검증하기 쉽고 디버깅 비용이 저렴합니다.

내부 도구를 구축하는 경우 가격 조회를 코드에 포함된 상수가 아닌 구성 문제로 취급하세요.

일반적인 통합 실수

도달 가능한 URL 대신 원시 업로드를 보내는 경우. 문서화된 요청 구조는 URL 기반 미디어 입력을 예상합니다. 소스 클립이 서버에서 참조할 수 있는 안정적인 URL에서 이미 사용 가능한지 확인하세요.

모션 변경에 VideoEdit을 사용하는 경우. VideoEdit은 변환 엔드포인트이지 안무 엔드포인트가 아닙니다. 원본 움직임이 잘못된 경우 T2V 또는 I2V로 다시 생성하세요.

소스 비디오와 참조 이미지 제한을 혼동하는 경우. 소스 비디오는 더 큰 에셋입니다: mp4/mov, 최대 100 MB. 더 작은 20 MB 제한은 video_url이 아닌 reference_image_url에 적용됩니다.

너무 공격적으로 폴링하는 경우. 수 초가 걸리는 비디오 작업에 매초 태스크 결과 엔드포인트를 호출하는 것은 불필요합니다. 5~10초 간격이 일반적으로 더 나은 시작점입니다.

URL TTL을 무시하는 경우. 결과 URL은 임시적입니다. 편집된 클립이 다운스트림에서 중요하다면 에셋을 신속하게 유지하세요.

프롬프트 특수성을 건너뛰는 경우. "더 좋게 만들어 줘"는 편집 프롬프트가 아닙니다. 대상 스타일, 환경, 피사체 처리 및 변경되지 않아야 할 모션을 설명하세요.

어떤 Wan 2.7 엔드포인트를 선택해야 할까요?

이 빠른 규칙을 사용하세요:

  • 이미 소스 비디오가 있다면 VideoEdit 을 선택하세요.
  • 소스 이미지가 있거나 정지 이미지 기반 워크플로우에서 연속성을 원한다면 I2V 를 선택하세요.
  • 텍스트만 있다면 T2V 를 선택하세요.
  • 정체성 일관성과 참조 캐릭터 제어가 기존 클립 편집보다 더 중요하다면 R2V 를 선택하세요.

이 구분이 통합을 단순하게 유지합니다. 팀들은 종종 프롬프트 기반 편집 문제인 작업에 텍스트-투-비디오를 과도하게 사용합니다.

FAQ

Wan 2.7 VideoEdit의 Novita AI 엔드포인트는 무엇인가요?

POST https://api.novita.ai/v3/async/wan2.7-videoedit. task_id를 반환한 다음 완료를 위해 GET https://api.novita.ai/v3/async/task-result?task_id=<id>를 폴링합니다.

소스 비디오와 함께 참조 이미지를 제공할 수 있나요?

네. 문서화된 요청 구조는 video_urlprompt와 함께 선택적 reference_image_url을 지원하며, 이는 최종 룩을 더 세밀하게 조정하는 데 유용합니다.

Novita AI에서 Wan 2.7 VideoEdit이 지원하는 비디오 길이는 어떻게 되나요?

2026년 7월 29일 기준 문서에 따르면 duration 기본값은 0이며, 이는 전체 입력 비디오 길이를 의미합니다. duration을 명시적으로 설정하면 문서화된 범위는 2~10초입니다.

Wan 2.7 VideoEdit은 큰 소스 비디오를 허용하나요?

네, 문서화된 제한 내에서 가능합니다. 공식 문서에는 최대 100 MB의 mp4/mov 입력이 명시되어 있습니다. 별도의 20 MB 제한은 선택적 참조 이미지에 적용됩니다.

Wan 2.7 VideoEdit과 Wan 2.7 I2V 중 무엇을 사용해야 하나요?

이미 클립이 있고 이를 변환하려면 VideoEdit을 사용하세요. 시작점이 정지 이미지 또는 이미지 기반 워크플로우라면 I2V를 사용하세요.

추천 문서