# 1. exchange client credentials for a token (valid 1 hour)
curl -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials"# 2. upload by link - YouTube, Drive, S3, Vimeo or direct URL
curl -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" \
-d '{"link": "https://youtu.be/...", "name": "Q3 launch"}'# 3. create the dubbing project - this starts the dub
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" \
-d '{
"video_id": "b8f7835d-e8c9-4ff4-8e34-5c336d818319",
"dst_lang": "es-mx",
"name": "Q3 launch"
}'# Poll the project until status is merging_done.while :; do
curl -s https://api.rask.ai/v2/projects/$ID \
-H "Authorization: Bearer $TOKEN" | jq .status
sleep 10done멀티파트 폼 데이터로 파일을 보내거나 링크를 게시하세요. 유튜브, 구글 드라이브, S3, 비메오 및 모든 직접 다운로드 URL을 지원합니다. 비용이 청구되기 전에 미디어 ID와 전체 기술 메타데이터를 반환합니다.
미디어 ID를 video_id로 입력하고 타겟 언어를 지정하세요. 선택 사항으로 자체 대본이나 용어집을 첨부할 수 있습니다. 더빙이 즉시 시작됩니다.
상태(status)가 merging_done이 될 때까지 확인한 후, 더빙된 동영상, 오디오 트랙, 자막 파일을 다운로드하세요.
# pip install git+https://github.com/braskai/rask-sdk
import asyncio
from rask_sdk import RaskSDKClient
async def main():
client = RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
media = await client.upload_media_link(link="https://youtu.be/...")
project = await client.create_project(video_id=media.id, dst_lang="es-mx")
while project.status != "merging_done":
await asyncio.sleep(10)
project = await client.get_project(project.id)
print(project.translated_video, project.translation_srt_path)
asyncio.run(main())import os, time, requests
AUTH = "https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token"
API = "https://api.rask.ai"
token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}
media = requests.post(f"{API}/api/library/v1/media/link", headers=h,
json={"link": "https://youtu.be/..."}).json()
project = requests.post(f"{API}/v2/projects", headers=h,
json={"video_id": media["id"], "dst_lang": "es-mx"}).json()
while project["status"] != "merging_done":
time.sleep(10)
project = requests.get(f"{API}/v2/projects/{project['id']}", headers=h).json()
print(project["translated_video"])// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';
const auth = await fetch('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token', {
method: 'POST',
headers: { Authorization: 'Basic ' + btoa(`${CLIENT_ID}:${CLIENT_SECRET}`) },
body: new URLSearchParams({ grant_type: 'client_credentials' }),
}).then(r => r.json());
const h = { Authorization: `Bearer ${auth.access_token}`, 'Content-Type': 'application/json' };
const media = await fetch(`${API}/api/library/v1/media/link`, {
method: 'POST', headers: h,
body: JSON.stringify({ link: 'https://youtu.be/...' }),
}).then(r => r.json());
let project = await fetch(`${API}/v2/projects`, {
method: 'POST', headers: h,
body: JSON.stringify({ video_id: media.id, dst_lang: 'es-mx' }),
}).then(r => r.json());
while (project.status !== 'merging_done') {
await new Promise(r => setTimeout(r, 10000));
project = await fetch(`${API}/v2/projects/${project.id}`, { headers: h }).then(r => r.json());
}
console.log(project.translated_video);# 1. token (valid 1 hour - cache and reuse it)
TOKEN=$(curl -s -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d "grant_type=client_credentials" | jq -r .access_token)
# 2. upload by link
VIDEO_ID=$(curl -s -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" \
-d '{"link": "https://youtu.be/..."}' | jq -r .id)
# 3. create the dubbing project
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" \
-d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\"}" | jq -r .id)
# 4. poll, then download
while [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" != "merging_done" ]; do
sleep 10
done<?php
use GuzzleHttp\Client;
$http = new Client(['base_uri' => 'https://api.rask.ai']);
$auth = json_decode((new Client)->post(
'https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
['auth' => [$clientId, $clientSecret],
'form_params' => ['grant_type' => 'client_credentials']]
)->getBody(), true);
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];
$media = json_decode($http->post('/api/library/v1/media/link',
['headers' => $h, 'json' => ['link' => 'https://youtu.be/...']])->getBody(), true);
$project = json_decode($http->post('/v2/projects',
['headers' => $h, 'json' => ['video_id' => $media['id'], 'dst_lang' => 'es-mx']])->getBody(), true);
while ($project['status'] !== 'merging_done') {
sleep(10);
$project = json_decode($http->get("/v2/projects/{$project['id']}",
['headers' => $h])->getBody(), true);
} 0s created
12s transcription_started
70s translation_started
95s voiceover_started
150s merging_started
170s merging_done

es-mx 및 es-es 모두 커버할 수 있습니다. 프로젝트 기록은 glossary_version유지되므로 나중에 수정하더라도 완료된 작업이 예기치 않게 변경되지 않습니다.유료 요금제를 이용하시면 API를 사용할 수 있습니다. 앱에서 클라이언트 ID와 시크릿을 생성한 후 바로 요청을 시작하세요. 기업용 계약, 대량 이용 할인, 맞춤형 언어 지원은 당사 영업팀을 통해 문의해 주세요.
OAuth 2.0 클라이언트 자격 증명: 클라이언트 ID와 시크릿을 단기 베어러 토큰으로 교환하세요. 토큰은 1시간 동안 유효하므로 캐시에 저장해 두고 재사용하세요.
비동기식 처리. 프로젝트를 생성하면 즉시 반환되며 더빙 작업이 시작됩니다. 상태가 merging_done이 될 때까지 GET /v2/projects/{id}를 호출(Poll)하세요. 웹훅(Webhook) 전송은 엔터프라이즈 온보딩 과정에 포함됩니다.
모든 요청은 접수된 그대로 처리됩니다. 처리량은 대기열 상태에 따라 다르며, 처리 우선순위는 엔터프라이즈 계약 조건에 포함됩니다.
스페인어, 프랑스어, 독일어, 포르투갈어, 힌디어, 일본어, 한국어를 포함한 135개 이상의 지원 언어와 지역별 변형을 제공합니다. 예를 들어 단순히 es 대신 es-mx를 사용할 수 있습니다. 원본 언어는 자동으로 감지되며 직접 설정할 수도 있습니다. 전체 소스 및 타겟 코드 목록은 API 문서에서 확인할 수 있습니다. 지원 목록에 없는 언어의 경우, 가능 여부와 옵션에 대해 저희 팀에 문의해 주세요.
즉시 목소리 복제(Instant Voice Clone) 기능은 지원되는 목표 언어에 대해 원본 동영상에 있는 화자의 목소리를 그대로 사용합니다. 재사용 가능한 맞춤형 목소리 복제(Custom Voice Clone)의 경우, 화자의 동의하에 Rask 앱에서 생성한 후 API를 통해 지정할 수 있습니다. 결과는 원본 오디오, 선택한 언어 및 목소리에 따라 달라집니다.
동영상 길이, 화자 수, 목표 언어, 대기열 상태에 따라 다릅니다. 각 프로젝트는 텍스트 변환부터 최종 병합까지 모든 단계의 진행 상황을 제공하므로 사용자에게 실시간 진행 상태를 보여줄 수 있습니다.
7가지 동영상 형식(MP4, MOV, MKV, AVI, WebM, M4V, 3GP)과 4가지 오디오 형식(MP3, WAV, FLAC, M4A)을 지원합니다. 파일을 직접 업로드하는 대신 유튜브, 구글 드라이브, S3, 비메오 링크나 일반 URL을 통해 불러올 수도 있습니다.
원본 오디오에서 화자를 자동으로 감지하여 분리한 후, 타겟 언어에서 각 화자에게 고유한 목소리를 지정합니다. 화자별 지정을 직접 변경할 수도 있고, 화자 수를 미리 알고 있는 경우 프로젝트 생성 시 num_speakers를 전달할 수도 있습니다.
.srt 파일을 업로드하여 대본을 만들고, 프로젝트를 생성할 때 해당 ID를 전달할 수 있습니다. 또한 API를 통해 텍스트로 변환한 뒤 스크립트를 구간별로 수정할 수도 있습니다.
완료된 모든 프로젝트는 더블링 타이밍에 맞춰진 .srt 및 .vtt 형식의 자막 파일을 동영상 및 오디오 트랙과 함께 제공합니다.
GitHub에 공개된 공식 비동기 Python SDK는 안정적이고 하위 호환성이 유지되는 인터페이스를 제공합니다. 다른 언어의 경우, 공개된 OpenAPI 스펙을 사용하여 클라이언트를 생성할 수 있습니다. 노코드 파이프라인을 위한 n8n 노드도 제공됩니다.
수정된 내용만 반영됩니다. 수정 및 추가된 구간의 총 길이를 합산하여 1분 단위로 반올림하므로, 몇 줄을 수정하는 데는 약 1분 정도의 비용만 소요됩니다.