# 1. send your script as timed segments - one speaker per line
curl -X POST https://api.rask.ai/v2/transcriptions \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}}
]}'
# 2. voice the script over your video
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\", \"transcript_id\": \"$TRANSCRIPT_ID\"}"# When status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_audio, translated_video}'



Téléchargez la vidéo ou l'enregistrement audio associé à votre voix off, via un fichier ou une URL multimédia compatible. Sa chronologie fournit le rythme de votre script.
Créez une transcription à partir de segments de texte avec des horodatages et des interlocuteurs, ou à partir d'un fichier SRT, puis créez le projet avec son transcript_id et une langue cible.
Affichez la liste des voix, attribuez une voix prédéfinie ou un clone à chaque interlocuteur, régénérez si nécessaire, puis téléchargez la voix off, la vidéo et les fichiers de sous-titres.
# 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)
script = await client.create_transcription(data=schemas.TranscriptionCreate(segments=[
schemas.SegmentCreate(speaker="SPEAKER_00", start="00:00:00,500", end="00:00:04,800",
src=schemas.SegmentTextCreatePatch(text="Welcome to the new dashboard.", lang="en"),
dst=schemas.SegmentTextCreatePatch(text="Bienvenido al nuevo panel.", lang="es-mx")),
]))
job = await wait(client, await client.create_project(data=schemas.ProjectCreate(
video_id=VIDEO_ID, dst_lang="es-mx", transcript_id=script.id)))
# pick a female AI voice preset from the library for SPEAKER_00
voices = await client.get_project_voices(project_id=job.id)
preset = next(v for v in voices if v.gender == "female")
await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice={**job.voice, "SPEAKER_00": preset.id}))
job = await wait(client, await client.generate_project(project_id=job.id))
print(job.voiceover, job.translated_video)
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
script = requests.post(f"{API}/v2/transcriptions", headers=h, json={"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}},
]}).json()
pid = requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": VIDEO_ID, "dst_lang": "es-mx", "transcript_id": script["id"]}).json()["id"]
project = wait(pid)
voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
preset = next(v for v in voices if v["gender"] == "female")
requests.patch(f"{API}/v2/projects/{pid}", headers=h,
json={"voice": {**project["voice"], "SPEAKER_00": preset["id"]}})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["voiceover"])// 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; };
const script = await call('POST', '/v2/transcriptions', { segments: [
{ speaker: 'SPEAKER_00', start: '00:00:00,500', end: '00:00:04,800',
src: { text: 'Welcome to the new dashboard.', lang: 'en' },
dst: { text: 'Bienvenido al nuevo panel.', lang: 'es-mx' } },
] });
const { id } = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang: 'es-mx', transcript_id: script.id });
const project = await wait(id);
const voices = await call('GET', `/v2/projects/${id}/voices`);
const preset = voices.find((v) => v.gender === 'female');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: preset.id } });
await call('POST', `/v2/projects/${id}/generate`);
console.log((await wait(id)).voiceover);# 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. your script as an SRT file in the target language
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?dst_lang=es-mx" \
-H "Authorization: Bearer $TOKEN" -F "dst=@script_es-mx.srt" | jq -r .id)
# 3. voice it over the video
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\", \"transcript_id\": \"$TRANSCRIPT_ID\"}" | jq -r .id)
# 4. when status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_video}'<?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']];
$script = $json($http->post('/v2/transcriptions', ['headers' => $h, 'json' => ['segments' => [[
'speaker' => 'SPEAKER_00', 'start' => '00:00:00,500', 'end' => '00:00:04,800',
'src' => ['text' => 'Welcome to the new dashboard.', 'lang' => 'en'],
'dst' => ['text' => 'Bienvenido al nuevo panel.', 'lang' => 'es-mx'],
]]]]));
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $videoId, 'dst_lang' => 'es-mx', 'transcript_id' => $script['id']]]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['voiceover'];{"label": "Renata", "gender": "female", "sample_src": "https://..."} AI voice preset
{"label": "Gerardo", "gender": "male", "sample_src": "https://..."} AI voice preset
{"label": "Maria Lopez", "gender": "auto", "sample_src": "https://..."} custom voice clone
{"label": "Voice Clone", "gender": "auto", "sample_src": null} instant voice clone

es-mx et es-es de même. Les enregistrements du projet glossary_version, de sorte que les modifications ultérieures ne modifient jamais le travail terminé sans que vous le sachiez.Oui, pour la voix off de vidéos. Envoyez votre script sous forme de segments de texte chronométrés ou de fichier SRT avec une vidéo, et l'API génère une voix naturelle synchronisée avec l'image, en utilisant des voix par IA ou des clones vocaux, avec des sous-titres et des pistes audio dans le même projet.
Rask génère la voix pour des projets complets et livre les fichiers, ce qui convient aux vidéos publiées ainsi qu'aux contenus de formation et de marketing. Pour les agents vocaux, les centres de contact et autres applications à faible latence nécessitant un audio en quelques secondes, une API de synthèse vocale en streaming est plus adaptée.
La voix off est fournie une fois la génération terminée pour le projet : la voix off au format WAV pour les formules éligibles, l'audio mixé et la vidéo. L'API ne diffuse pas de segments audio ni d'octets audio pendant la génération.
Créez une transcription via la méthode POST /v2/transcriptions à partir de segments comportant chacun un locuteur, une heure de début et de fin au format HH:MM:SS,mmm, ainsi que le texte correspondant. Vous pouvez également importer un fichier SRT via la méthode POST /v2/transcriptions/srt. Transmettez ensuite l'identifiant « transcript_id » lors de la création du projet.
Chaque locale cible dispose de préréglages de voix IA avec un genre défini dans la bibliothèque de voix. Récupérez les options disponibles pour un projet à l'aide de la requête GET /v2/projects/{id}/voices et attribuez-en une à chaque locuteur en fonction de l'identifiant de la voix. Dans les langues prenant en charge le clonage de voix, vous pouvez également utiliser des clones de voix.
Oui. Créez une fois un clone vocal personnalisé dans l'application Rask avec le consentement de la personne concernée, puis attribuez son identifiant vocal à n'importe quel locuteur via l'API, dans les langues prises en charge pour le clonage vocal. Cela permet d'assurer la cohérence de la voix de la marque.
Faites votre choix parmi plus de 135 langues et options régionales. Rédigez le script dans une langue et Rask se charge de le traduire, ou envoyez-le directement dans la langue cible. Des voix générées par IA sont disponibles pour chaque locale cible.
L'API accepte du texte en clair, segment par segment. Pour faciliter la prononciation, adaptez l'orthographe du texte du script. Les glossaires déterminent la manière dont les termes sont traduits, et non leur prononciation.
La lecture respecte le ton choisi et votre texte, ponctuation comprise. Pour offrir une palette émotionnelle fidèle à une véritable interprétation, un clone vocal de l'orateur d'origine conserve davantage l'identité vocale de ce dernier.
Vous pouvez utiliser une vidéo ou un enregistrement audio. Importez le fichier multimédia source et fournissez un script synchronisé pour générer la voix off tout au long de la timeline. L'importation d'un fichier multimédia est obligatoire.
Non. L'utilisation est facturée à la minute de vidéo, arrondie à la minute entière supérieure, à partir du même forfait de minutes que celui de l'application Rask. Les minutes supplémentaires coûtent 3 $/min sur les forfaits standard éligibles. Les tarifs pour les entreprises sont adaptés à votre contrat. Le réenregistrement est facturé en fonction des segments modifiés, avec un minimum d'une minute par session facturée.
Commencez par profiter d'un essai gratuit dans l'application Rask, sans carte bancaire, pour écouter les voix sur votre propre vidéo. L'accès à l'API est disponible dans les formules Creator Pro, Business et Enterprise, les fonctionnalités dépendant de la formule choisie.
L'accès à l'API est disponible avec les abonnements Creator Pro, Business et Enterprise, et les fonctionnalités dépendent de votre formule. Vous générez votre identifiant client et votre clé secrète dans l'application pour commencer à l'utiliser immédiatement. Pour les conditions Enterprise, la tarification par volume et la prise en charge de langues personnalisées, veuillez contacter notre équipe.