# 1. create the dub - each speaker gets an Instant Voice Clone by default
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"}'
# 2. list the voices available in this project
curl https://api.rask.ai/v2/projects/$ID/voices \
-H "Authorization: Bearer $TOKEN"
# "label": "Voice Clone", "gender": "auto" instant clone
# "label": "Maria Lopez", "sample_src": "https://..." your custom clone
# 3. assign your custom clone - include every speaker in the map
curl -X PATCH https://api.rask.ai/v2/projects/$ID \
-H "Authorization: Bearer $TOKEN" \
-d '{"voice": {"SPEAKER_00": "<custom_voice_id>", "SPEAKER_01": "<voice_id>"}}'# 4. re-dub with the new voices, then poll until merging_done
curl -X POST https://api.rask.ai/v2/projects/$ID/generate \
-H "Authorization: Bearer $TOKEN"
while :; do
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq .status
sleep 10
done



Çok parça form verisi olarak bir dosya gönderin veya YouTube, Google Drive, S3, Vimeo ya da herhangi bir doğrudan URL'den bir bağlantı ekleyin. Bu videodaki konuşma, her Anında Ses Klonu için ses örneğidir.
Medya kimliğini video_id olarak ve hedef dili iletin. Tespit edilen her konuşmacı, desteklenen dillerde bir Anında Ses Klonu alır ve dublaj hemen başlar.
Proje için sesleri listeleyin, herhangi bir konuşmacıya özel bir klon veya hazır ayar atayın, ardından /generate çağrısı yapın ve dublaj tamamlandığında dosyaları indirin.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
async def wait(client, job):
while job.status is not enums.ProjectStatus.MERGING_DONE:
await asyncio.sleep(10)
job = await client.get_project(project_id=job.id)
return job
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
video = await client.create_media_link(data=schemas.MediaCreateLink(link="https://youtu.be/..."))
while video.status is not enums.MediaStatus.READY:
await asyncio.sleep(5)
video = await client.get_media(media_id=video.id)
# first dub: every speaker gets an Instant Voice Clone
job = await wait(client, await client.create_project(
data=schemas.ProjectCreate(video_id=video.id, dst_lang="es-mx")))
# assign a custom clone to SPEAKER_00, keep the other speakers as they are
voices = await client.get_project_voices(project_id=job.id)
custom = next(v for v in voices if v.label == "Maria Lopez")
voice_map = {**job.voice, "SPEAKER_00": custom.id}
await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice=voice_map))
job = await wait(client, await client.generate_project(project_id=job.id))
print(job.translated_video, job.voiceover)
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}"}
def wait(pid):
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
time.sleep(10)
return p
video = requests.post(f"{API}/api/library/v1/media/link", headers=h, json={"link": "https://youtu.be/..."}).json()
while video["status"] != "ready":
time.sleep(5)
video = requests.get(f"{API}/api/library/v1/media/{video['id']}", headers=h).json()
pid = requests.post(f"{API}/v2/projects", headers=h,
json={"video_id": video["id"], "dst_lang": "es-mx"}).json()["id"]
project = wait(pid)
voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
custom = next(v for v in voices if v["label"] == "Maria Lopez")
voice_map = {**project["voice"], "SPEAKER_00": custom["id"]} # every speaker stays in the map
requests.patch(f"{API}/v2/projects/{pid}", headers=h, json={"voice": voice_map})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["translated_video"])// 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());
const wait = async (id) => { let p; while ((p = await call('GET', `/v2/projects/${id}`)).status !== 'merging_done') await sleep(10000); return p; };
let video = await call('POST', '/api/library/v1/media/link', { link: 'https://youtu.be/...' });
while (video.status !== 'ready') { await sleep(5000); video = await call('GET', `/api/library/v1/media/${video.id}`); }
const { id } = await call('POST', '/v2/projects', { video_id: video.id, dst_lang: 'es-mx' });
const project = await wait(id);
const voices = await call('GET', `/v2/projects/${id}/voices`);
const custom = voices.find((v) => v.label === 'Maria Lopez');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: custom.id } });
await call('POST', `/v2/projects/${id}/generate`);
console.log((await wait(id)).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. create the dub - Instant Voice Clones are assigned by default
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\": \"es-mx\"}" | jq -r .id)
# 3. after merging_done: read the current voice map and the voice options
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq .voice
curl -s https://api.rask.ai/v2/projects/$ID/voices -H "Authorization: Bearer $TOKEN" | jq '.[] | {id, label, gender}'
# 4. assign voices for every speaker, then re-dub
curl -s -X PATCH https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"voice": {"SPEAKER_00": "<custom_voice_id>", "SPEAKER_01": "<voice_id>"}}'
curl -s -X POST https://api.rask.ai/v2/projects/$ID/generate -H "Authorization: Bearer $TOKEN"<?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']];
$wait = function ($id) use ($http, $h, $json) {
do { sleep(10); $p = $json($http->get("/v2/projects/$id", ['headers' => $h])); }
while ($p['status'] !== 'merging_done');
return $p;
};
$id = $json($http->post('/v2/projects', ['headers' => $h,
'json' => ['video_id' => $videoId, 'dst_lang' => 'es-mx']]))['id'];
$project = $wait($id);
$voices = $json($http->get("/v2/projects/$id/voices", ['headers' => $h]));
$custom = current(array_filter($voices, fn($v) => $v['label'] === 'Maria Lopez'));
$map = array_merge($project['voice'], ['SPEAKER_00' => $custom['id']]);
$http->patch("/v2/projects/$id", ['headers' => $h, 'json' => ['voice' => $map]]);
$http->post("/v2/projects/$id/generate", ['headers' => $h]);
echo $wait($id)['translated_video']; 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ı glossary_version, böylece sonraki düzenlemeler tamamlanan çalışmaları asla habersiz değiştirmez.Evet. Rask ses klonlama API'si, bir videoyu seslendirirken her konuşmacının sesini klonlar. Hedef dilde bir proje oluşturun; desteklenen dillerde her konuşmacı bir Anında Ses Klonu alır. Ayrıca Rask uygulamasında oluşturduğunuz Özel Ses Klonunu herhangi bir konuşmacıya atayabilirsiniz.
Anında Ses Klonu, desteklenen hedef diller için kaynak videonuzdaki konuşmacıların seslerini kullanır. Yeniden kullanılabilir bir Özel Ses Klonu için bunu Rask uygulamasında konuşmacının izniyle oluşturun ve ardından API aracılığıyla atayın. Sonuçlar kaynak sesin yanı sıra seçilen dil ve sese göre değişiklik gösterir.
Anında Ses Klonu, kısa ses örnekleri kaydetmenize gerek kalmadan, seslendirdiğiniz videodaki konuşmadan otomatik olarak oluşturulur. Özel Ses Klonu ise bir kez yüklediğiniz ses örnekleriyle eğitilir, ses kütüphanenize kaydedilir ve voice_id kullanılarak herhangi bir projede yeniden değerlendirilir. Ses listesinde Anında Ses Klonu "Voice Clone" etiketine ve "auto" cinsiyetine sahiptir.
Özel Ses Klonu oluşturma işlemi Rask web platformunda yapılabilir. Klon kaydedildikten sonra proje seslerini alma uç noktasıyla voice_id değerini alın ve bunu API aracılığıyla bir konuşmacıya atayın.
MP4, MOV, WEBM, MKV, MP3, M4A veya WAV formatında; her biri en fazla 10 MB olan 10 dosyaya kadar, 1 ila 10 dakika uzunluğunda ses veya video yükleyin ya da bir YouTube veya Google Drive bağlantısı yapıştırın. En iyi sonuçlar için, iyi bir mikrofonla ve arka plan gürültüsü olmadan sessiz bir odada kaydedilmiş, tutarlı bir konuşma tarzına sahip tek bir konuşmacı kullanın.
Ses klonlaması 32 temel dili ve bu dillerin bölgesel varyantlarını destekler. Bölgesel varyantlar temel klonlama modelini kullanır: örneğin İngiltere İngilizcesi metni, ABD İngilizcesi ses modelini kullanır. Diğer hedef diller için bir yapay zeka ses ön ayarı seçin. Listenin tamamı için API dil kataloğuna bakın.
API, yalnızca ses içeren podcast'ler ve röportajlar dahil olmak üzere hem video hem de ses kayıtlarını seslendirir. Kendi kelimelerinizi kullanmak için çevrilmiş metni bölüm bölüm düzenleyin veya projeyi oluşturmadan önce kendi .srt dosyanızdan dökümünüzü oluşturun; böylece klonlanan ses sizin metninizi okur. Giriş her zaman bir kayıttır, bu nedenle yalnızca metin içeren seslendirmeler için metinden sese API'si daha uygundur.
GET /v2/projects/{id}/voices kullanarak ses seçeneklerini alın, ardından her konuşmacıyı, değiştirilenleri ve değiştirilmeyenleri içeren bir ses eşlemesiyle PATCH /v2/projects/{id} isteği gönderin. Yeniden seslendirmek için /generate komutunu çağırın. Yeniden seslendirme, ücretlendirilen çalıştırma başına en az bir dakika olmak üzere, değiştirilen bölümlerin toplam süresi üzerinden ücretlendirilir.
Creator Pro planları en fazla 3 özel ses, Business planları en fazla 10 paylaşılan ekip sesi ve Enterprise planları ise özel bir ses kitaplığı içerir.
Evet. Özel ses klonları, konuşmacının onayıyla oluşturulur ve yalnızca konuşmacıların onay verdiği videoları seslendirmelisiniz. Rask, onaya dayalı ses klonlaması ve yapay zeka güvenlik kontrolleri kullanır; sesiniz asla genel modelleri eğitmek için kullanılmaz.
Klon, tını ve perde dahil olmak üzere konuşmacının ses kimliğini kopyalar, böylece başka bir dilde kendi sesleriyle konuşuyor gibi duyulurlar. Duygusal ton, akış ve ritim kaynak ses ile çevrilmiş senaryoyu takip eder, bu nedenle net ve ifade dolu kaynak konuşma en iyi sonuçları verir.
Kaynak videonun haklarına ve konuşmacıların onayına sahip olduğunuzda, klonlanan seslerle seslendirilmiş videolarınızı ticari içeriklerinizde yayınlayabilirsiniz. Planınız için geçerli olan ayrıntılar için Rask Kullanım Koşullarını inceleyin.
Ses klonlama, seslendirmenin bir parçasıdır ve ayrı bir ücreti yoktur: API kullanımı, Rask uygulamasındaki dakika havuzundan, sonraki tam dakikaya yuvarlanarak video dakikası başına ücretlendirilir. Planın üzerindeki dakikalar dakikası 3 dolardan ücretlendirilir. Ses değişikliğinden sonra yeniden seslendirme yalnızca değiştirilen bölümler için faturalandırılır. Kredi kartı gerekmeden ücretsiz deneme ile başlayın.