# 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 correspondant à votre voix off, à l'aide d'un fichier ou d'une URL média prise en charge. Sa timeline sert de référence temporelle pour votre script.
Créez une transcription à partir de segments de texte avec des repères temporels et des locuteurs, 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 locuteur, 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 la même manière. L'historique du projet glossary_version, de sorte que les modifications ultérieures ne modifient jamais discrètement le travail déjà terminé.Oui, pour la voix hors champ des 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 un son naturel synchronisé 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 parole pour des projets complets et fournit des fichiers, ce qui convient aux vidéos publiées, aux contenus de formation et de marketing. Pour les agents vocaux, les centres de contact et autres applications à faible latence nécessitant de l'audio en quelques secondes, une API de synthèse vocale en streaming est plus adaptée.
L'audio est fourni une fois la génération du projet terminée : la voix hors champ au format WAV sur les abonnements éligibles, ainsi que l'audio mixé et la vidéo. L'API ne diffuse pas de segments ou d'octets audio en continu pendant la génération.
Créez une transcription avec POST /v2/transcriptions à partir de segments comprenant chacun un interlocuteur, un temps de début et de fin au format HH:MM:SS,mmm, et le texte. Vous pouvez aussi importer un fichier SRT vers POST /v2/transcriptions/srt. Transmettez ensuite le transcript_id lors de la création du projet.
Chaque langue cible dispose de préréglages de voix IA avec un genre défini dans la bibliothèque de voix. Obtenez les options d'un projet avec GET /v2/projects/{id}/voices et attribuez-en une par intervenant via son identifiant de voix. Dans les langues compatibles avec le clonage de voix, vous pouvez également utiliser des clones vocaux.
Oui. Créez un clone de voix personnalisé une seule fois dans l'application Rask avec le consentement du locuteur, puis attribuez son identifiant de voix à n'importe quel intervenant via l'API dans les langues compatibles. Cela fonctionne très bien pour maintenir une voix de marque cohérente.
Choisissez parmi plus de 135 options de langues et de régions. Rédigez le script dans une seule langue et Rask le traduit, ou envoyez le script directement dans la langue cible. Des voix IA sont disponibles pour chaque zone géographique.
L'API accepte du texte brut par segment. Pour guider la prononciation, ajustez l'orthographe dans le texte du script. Les glossaires contrôlent la traduction des termes, mais pas leur prononciation.
Le rendu suit la voix sélectionnée et votre texte, y compris la ponctuation. Pour une palette d'émotions fidèle à une performance réelle, un clone vocal du locuteur d'origine conserve davantage son identité vocale.
Vous pouvez utiliser une vidéo ou un enregistrement audio. Téléchargez le fichier source et fournissez un script chronométré pour générer la voix off le long de sa timeline. Un fichier multimédia téléchargé est requis.
Non. L'utilisation est facturée par minute de vidéo, arrondie à la minute supérieure, à partir du même solde de minutes que l'application Rask. Les minutes supplémentaires coûtent 3 $/min sur les forfaits standard éligibles. La tarification Entreprise est adaptée à votre contrat. Le redoublage est facturé sur les segments modifiés, avec un minimum d'une minute par exécution facturée.
Commencez par 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 sur les forfaits Creator Pro, Business et Enterprise, avec des fonctionnalités définies par votre forfait.
L'accès à l'API est disponible sur les forfaits Creator Pro, Business et Enterprise, avec des fonctionnalités définies par votre forfait. Vous générez votre identifiant client et votre clé secrète dans l'application et vous pouvez commencer immédiatement. Les conditions pour les entreprises, la tarification par volume et la prise en charge de langues personnalisées sont gérées par notre équipe.