# 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



Invia un file come dati di un modulo multipart o inserisci un link da YouTube, Google Drive, S3, Vimeo o qualsiasi URL diretto. Il parlato di questo video funge da campione vocale per ogni clonazione istantanea della voce.
Inserisci l'ID multimediale come video_id e una lingua di arrivo. Ogni interlocutore rilevato riceve una clonazione vocale istantanea nelle lingue supportate e il doppiaggio parte subito.
Elenca le voci per il progetto, assegna un clone personalizzato o una voce preimpostata a qualsiasi interlocutore, quindi richiama /generate e scarica i file quando il doppiaggio è completato.
# 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 e es-es allo stesso modo. Il progetto registra glossary_version, così le modifiche successive non alterano mai inaspettatamente il lavoro completato.Sì. L'API di clonazione vocale di Rask clona la voce di ciascun parlante come parte del doppiaggio di un video. Crea un progetto con una lingua di arrivo e ogni parlante riceverà una Clonazione Vocale Istantanea nelle lingue supportate. Puoi anche assegnare una Copia Vocale Personalizzata creata nell'app di Rask a qualsiasi parlante.
La Clonazione Vocale Istantanea utilizza le voci dei parlanti presenti nel video originale per le lingue di arrivo supportate. Per una Copia Vocale Personalizzata e riutilizzabile, creala nell'app di Rask con il consenso del parlante, quindi assegnala tramite l'API. I risultati dipendono dall'audio di origine e dalla lingua e voce selezionate.
La Clonazione Vocale Istantanea viene creata automaticamente dal parlato nel video che doppiate, senza dover registrare brevi campioni audio. La Copia Vocale Personalizzata viene addestrata a partire da campioni audio caricati una sola volta, salvati nella libreria vocale e riutilizzabili in qualsiasi progetto tramite il rispettivo voice_id. Nell'elenco delle voci, la Clonazione Vocale Istantanea presenta l'etichetta "Copia Vocale" e genere "auto".
La creazione di una Copia Vocale Personalizzata è disponibile sulla piattaforma web di Rask. Una volta salvata la copia, recupera il suo voice_id utilizzando l'endpoint delle voci di progetto e assegnalo a un parlante tramite l'API.
Carica da 1 a 10 minuti di audio o video, fino a un massimo di 10 file da 10 MB ciascuno, nei formati MP4, MOV, WEBM, MKV, MP3, M4A o WAV, oppure incolla un link di YouTube o Google Drive. Per risultati ottimali, usa una sola persona che parla con un tono coerente, registrata in una stanza silenziosa con un buon microfono e senza rumori di fondo.
La clonazione della voce supporta 32 lingue di base e le relative varianti regionali. Le varianti regionali usano il modello di clonazione di base: ad esempio, il testo in inglese britannico usa il modello vocale dell'inglese americano. Per altre lingue di arrivo, scegli una voce AI preimpostata. Consulta il catalogo delle lingue dell'API per l'elenco completo.
L'API esegue il doppiaggio di registrazioni sia video che audio, inclusi podcast e interviste solo audio. Per usare le tue parole, modifica il testo tradotto segmento per segmento o crea la trascrizione dal tuo file .srt prima di creare il progetto; la voce clonata pronuncerà il tuo testo. L'input è sempre una registrazione, quindi per i voiceover basati solo su testo è più adatta un'API text-to-speech.
Ottieni le opzioni vocali con GET /v2/projects/{id}/voices, quindi invia PATCH /v2/projects/{id} con una mappatura vocale che includa ogni oratore, sia quello modificato sia quelli invariati. Chiama /generate per doppiare di nuovo. Il nuovo doppiaggio viene fatturato in base alla durata combinata dei segmenti modificati, con un minimo di un minuto per ogni esecuzione addebitata.
I piani Creator Pro includono fino a 3 voci personalizzate, i piani Business fino a 10 voci condivise per il team e i piani Enterprise una libreria di voci personalizzate.
Sì. Le clonazioni vocali personalizzate vengono create con il consenso dell'oratore e dovresti doppiare solo i video i cui autori hanno dato il proprio accordo. Rask utilizza la clonazione vocale basata sul consenso e controlli di sicurezza dell'IA; inoltre, il tuo audio non viene mai utilizzato per addestrare modelli generali.
Il clone riproduce l'identità vocale dell'oratore, inclusi timbro e tonalità, in modo che suoni come se stesso in un'altra lingua. Il tono emotivo, la cadenza e il ritmo seguono l'audio di origine e il copione tradotto; pertanto, un parlato di origine chiaro ed espressivo garantisce i risultati migliori.
Puoi pubblicare video doppiati con voci clonate nei tuoi contenuti commerciali quando disponi dei diritti sul video originale e del consenso degli oratori. Verifica i Termini di servizio di Rask per i dettagli applicabili al tuo piano.
La clonazione vocale fa parte del doppiaggio e non prevede costi separati: l'utilizzo dell'API viene fatturato al minuto di video, arrotondato per eccesso al minuto intero successivo, attingendo dallo stesso monte minuti dell'app Rask. I minuti eccedenti il piano costano 3 $ al minuto. Il nuovo doppiaggio dopo una modifica della voce viene fatturato solo per i segmenti modificati. Inizia con una prova gratuita, senza carta di credito.