# 1. exchange your client id and secret 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 the video - file, or a YouTube, Drive, S3, Vimeo or direct link
curl -X POST https://api.rask.ai/api/library/v1/media/link \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"link": "https://youtu.be/...", "name": "Q3 launch"}'
# 3. create the project - transcription, translation and dubbing start
curl -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\"}"# Poll until merging_done, then collect the files
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, translated_video, voiceover, translation_srt_path}'



Bir video veya ses dosyasını çok parçalı (multipart) form verisi olarak gönderin ya da YouTube, Google Drive, S3, Vimeo veya herhangi bir doğrudan URL'den bir bağlantı paylaşın. Herhangi bir ücret ödemeden önce bir medya kimliği ve dosya üst verileri (metadata) elde edersiniz.
Medya kimliğini video_id olarak ve bir hedef dil girin. İsteğe bağlı olarak kendi metninizi veya bir sözlük ekleyin. İşlem hemen başlar.
Durum merging_done aşamasına ulaşana kadar takip edin, ardından dublajlı videoyu, ses dosyalarını, altyazı dosyalarını ve metni indirin.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
async def main():
# the client exchanges your credentials for tokens and refreshes them
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://youtu.be/..."))
while media.status is enums.MediaStatus.PROCESSING:
await asyncio.sleep(5)
media = await client.get_media(media_id=media.id)
job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="es-mx"))
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
print(job.translated_video, job.translation_srt_path, job.translation_vtt_path)
asyncio.run(main())import 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}"}
with open("launch.mp4", "rb") as f:
media = requests.post(f"{API}/api/library/v1/media", headers=h,
params={"kind": "video"}, files={"data": f}).json()
while media["status"] == "processing":
time.sleep(5)
media = requests.get(f"{API}/api/library/v1/media/{media['id']}", headers=h).json()
pid = requests.post(f"{API}/v2/projects", headers=h,
json={"video_id": media["id"], "dst_lang": "de-de"}).json()["id"]
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
time.sleep(10)
for field in ("translated_video", "translated_audio", "translation_srt_path"):
print(field, p[field]) # presigned links, valid for one hour// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
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 call = (method, path, body) => fetch(API + path, { method, headers: h, body: body && JSON.stringify(body) }).then((r) => r.json());
let media = await call('POST', '/api/library/v1/media/link', { link: 'https://youtu.be/...' });
while (media.status === 'processing') { await sleep(5000); media = await call('GET', `/api/library/v1/media/${media.id}`); }
let p = await call('POST', '/v2/projects', { video_id: media.id, dst_lang: 'ja-jp' });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
const { translated_video, voiceover, translation_vtt_path } = p;
console.log({ translated_video, voiceover, translation_vtt_path });# 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" -H "Content-Type: application/json" \
-d '{"link": "https://youtu.be/..."}' | jq -r .id)
# 3. create the project once the media status is ready
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"pt-br\"}" | jq -r .id)
# 4. wait for merging_done, then read the links
until [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" = merging_done ]; do
sleep 10
done
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{translated_video, translated_audio, translation_srt_path}'<?php
use GuzzleHttp\Client;
$http = new Client(['base_uri' => 'https://api.rask.ai']);
$json = fn($r) => json_decode($r->getBody(), true);
$auth = $json((new Client)->post('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
['auth' => [$clientId, $clientSecret], 'form_params' => ['grant_type' => 'client_credentials']]));
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];
$media = $json($http->post('/api/library/v1/media/link', ['headers' => $h, 'json' => [
'link' => 'https://youtu.be/...']]));
while ($media['status'] === 'processing') {
sleep(5);
$media = $json($http->get("/api/library/v1/media/{$media['id']}", ['headers' => $h]));
}
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $media['id'], 'dst_lang' => 'fr-fr']]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['translated_video'], PHP_EOL, $p['translation_srt_path'], PHP_EOL; 0s created
11s transcription_started
87s translation_started
99s voiceover_started
154s merging_started
165s merging_done

es-mx ve es-es benzer şekilde hizmet eder. Proje kayıtları sözlük_sürümü, böylece daha sonra yapılan düzenlemeler tamamlanan çalışmayı habersiz değiştirmez.Rask AI API, video yerelleştirmesi için kullanılan bir REST API'dir. Videodaki konuşmaları yazıya döker, çevirir, yapay zeka sesleriyle veya ses klonlarıyla seslendirir, isteğe bağlı dudak senkronizasyonu ekler ve alt yazıları, ses dosyalarını ve metin dökümünü tek bir projeden sunar.
Yapay zeka dublajı, video çevirisi, video yerelleştirmesi, ses klonlama, dudak senkronizasyonu, video için metin okuma, sese dönüştürme, video dökümü ve alt yazılar. Bunlar tek bir kimlik doğrulamayı, tek bir proje nesnesini ve tek bir dakika havuzunu paylaşır; her birinin ayrıntıları ve kodu içeren kendi sayfası bulunur.
API erişimi Creator Pro, Business ve Enterprise planlarında sunulur ve özellikler planınıza göre belirlenir. Uygulama üzerinden istemci kimliğinizi ve gizli anahtarınızı oluşturarak hemen kullanmaya başlayabilirsiniz. Kurumsal şartlar, hacim bazlı fiyatlandırma ve özel dil seçenekleri için ekibimizle iletişime geçebilirsiniz.
API, OAuth 2.0 istemci kimlik bilgilerini kullanır. Belirteç (token) uç noktasında istemci kimliğinizi ve gizli anahtarınızı bir erişim belirteciyle değiştirin, ardından her istekte bunu bir Bearer belirteci olarak gönderin. Bir belirteç bir saat geçerlidir; bunu önbelleğe alın ve süresi dolduğunda yeni bir tane isteyin.
Evet. Resmi Python SDK, GitHub üzerindeki braskai/rask-sdk adresinde bulunur ve belirteçleri sizin için yönetir. REST API herhangi bir dilden çalışabilir; bu sayfada Python, Node, cURL ve PHP ile ilgili eksiksiz örnekler yer almaktadır.
Otomatik dil algılama özelliğiyle 75 dilde kaynak ses ve es-mx veya pt-br gibi hedefler için 135'ten fazla dil ve bölge seçeneği sunar. Ses klonlama, desteklenen ses klonlama dillerinde kullanılabilir; yapay zeka ses ön ayarları ise geri kalanını kapsar.
Kullanım, Rask uygulamasındakiyle aynı dakika havuzundan düşülmek üzere, bir sonraki tam dakikaya yuvarlanarak video dakikası başına ücretlendirilir. Uygun standart planlarda ek dakikaların maliyeti dakika başına 3 dolardır ve kurumsal fiyatlandırma anlaşmanıza göre özelleştirilir. Yeniden oluşturma, çalıştırma başına en az bir dakika olacak şekilde değiştirilen bölümler üzerinden ücretlendirilir ve dudak senkronizasyonu her tam video oluşturma işlemi için ayrı olarak faturalandırılır.
Hayır. İstek sınırı, eşzamanlılık kotası veya anahtar başına kısıtlama yoktur; böylece tüm kataloğu ve her hedef dili aynı anda çalıştırabilirsiniz.
Poll GET /v2/projects/{id} for the status of each project; the statuses are documented, so you can show real progress. Webhook delivery is part of enterprise onboarding.
MP4, MOV, MKV, AVI, WebM, M4V ve 3GP formatında video, MP3, WAV, FLAC ve M4A formatında ses ya da YouTube, Google Drive, S3, Vimeo veya doğrudan bir URL bağlantısı yükleyebilirsiniz.
Evet. Kaynak ve çevrilmiş SRT dosyalarını yükleyin ya da metin bölümleri gönderin ve projeyi oluştururken transcript_id değerini iletin. Rask, onayladığınız metni seslendirir.
Hayır. API, kaydedilmiş video ve ses dosyalarını işler ve sonuçları dosya olarak sunar. Canlı sesli asistanlar veya gerçek zamanlı altyazılar için akışlı bir konuşma API'si daha uygundur.
Brask Inc, SOC 2 Type II sertifikasına sahiptir ve Güven Merkezi'ndeki canlı kontrol durumuyla GDPR'ye uygun olarak faaliyet gösterir. Özel ses kopyaları, konuşmacının onayıyla oluşturulur.