# 1. one Spanish glossary - it applies to every Spanish regional variant
curl -X POST https://api.rask.ai/v2/glossaries \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name": "Brand terms", "src_lang": "en", "dst_lang": "es",
"entries": {"Rask Studio": "Rask Studio", "onboarding": "incorporación"}}'
# 2. a localized version per market, both with the same glossary
for lang in es-mx es-es; do
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\": \"$lang\", \"glossary_id\": \"$GLOSSARY_ID\"}"
done# Review: source and translated text, segment by segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription \
-H "Authorization: Bearer $TOKEN" \
| jq '.segments[] | {speaker, src: .src.text, dst: .dst.text}'



Créez un glossaire pour chaque paire de langues, enregistrez des voix personnalisées pour les présentateurs récurrents et choisissez le format régional adapté à chaque marché cible.
Téléchargez la vidéo source une seule fois, puis créez un projet pour chaque langue cible avec votre glossaire ou une traduction importée depuis un fichier SRT.
Lisez le texte traduit côte à côte, modifiez ce que les réviseurs signalent, redoublez les segments modifiés et téléchargez la vidéo traduite avec ses sous-titres.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
MARKETS = ["es-mx", "es-es"]
async def localize(client, video_id, locale, glossary_id):
job = await client.create_project(data=schemas.ProjectCreate(
video_id=video_id, dst_lang=locale, glossary_id=glossary_id))
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)
glossary = await client.create_glossary(data=schemas.GlossaryCreate(
name="Brand terms", src_lang="en", dst_lang="es",
entries={"Rask Studio": "Rask Studio", "onboarding": "incorporación"}))
jobs = await asyncio.gather(*(localize(client, VIDEO_ID, m, glossary.id) for m in MARKETS))
for job in jobs: # review before publishing
script = await client.get_project_transcription(project_id=job.id)
for seg in script.segments[:3]:
print(job.dst_lang, seg.speaker, seg.src.text, "->", seg.dst.text)
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}"}
glossary = requests.post(f"{API}/v2/glossaries", headers=h, json={
"name": "Brand terms", "src_lang": "en", "dst_lang": "es",
"entries": {"Rask Studio": "Rask Studio", "onboarding": "incorporación"}}).json()
ids = [requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": VIDEO_ID, "dst_lang": locale, "glossary_id": glossary["id"]}).json()["id"]
for locale in ["es-mx", "es-es"]]
for pid in ids:
while requests.get(f"{API}/v2/projects/{pid}", headers=h).json()["status"] != "merging_done":
time.sleep(10)
script = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()
for seg in script["segments"][:3]:
print(seg["src"]["text"], "->", seg["dst"]["text"])// 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 glossary = await call('POST', '/v2/glossaries', {
name: 'Brand terms', src_lang: 'en', dst_lang: 'es',
entries: { 'Rask Studio': 'Rask Studio', onboarding: 'incorporación' },
});
for (const dst_lang of ['es-mx', 'es-es']) {
let p = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang, glossary_id: glossary.id });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
const { segments } = await call('GET', `/v2/projects/${p.id}/transcription`);
segments.slice(0, 3).forEach((s) => console.log(dst_lang, s.src.text, '->', s.dst.text));
}# 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. import the translation your reviewers approved (source and translated .srt)
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?src_lang=en&dst_lang=es-mx" \
-H "Authorization: Bearer $TOKEN" \
-F "src=@source_en.srt" -F "dst=@approved_es-mx.srt" | jq -r .id)
# 3. create the localized version from it - Rask voices the approved script
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\"}"<?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']];
$glossary = $json($http->post('/v2/glossaries', ['headers' => $h, 'json' => [
'name' => 'Brand terms', 'src_lang' => 'en', 'dst_lang' => 'es',
'entries' => ['Rask Studio' => 'Rask Studio', 'onboarding' => 'incorporación'],
]]));
foreach (['es-mx', 'es-es'] as $locale) {
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $videoId, 'dst_lang' => $locale, 'glossary_id' => $glossary['id']]]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
$script = $json($http->get("/v2/projects/{$p['id']}/transcription", ['headers' => $h]));
echo $locale, ': ', $script['segments'][0]['dst']['text'], PHP_EOL;
} 0s created
11s transcription_started
87s translation_started
99s voiceover_started
154s merging_started
165s merging_done

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é.Une API de localisation de vidéos transforme une vidéo source en différentes versions pour d'autres marchés grâce à l'automatisation dans votre propre code : discours traduit et doublé, sous-titres, terminologie cohérente et synchronisation labiale optionnelle. Avec Rask, chaque version pour un marché est un projet que vous créez, vérifiez et téléchargez via une seule API REST.
La traduction change les mots. La localisation prépare la même vidéo pour un marché spécifique : la variante linguistique régionale, les termes de la marque qui restent cohérents, les voix des intervenants, les sous-titres et une étape de révision avant la publication. L'API Rask prend en charge tous ces éléments en un seul flux de travail.
Oui. Créez un projet pour chaque zone cible, comme es-mx pour le Mexique et es-es pour l'Espagne, et réutilisez un glossaire espagnol pour une terminologie de marque cohérente. Vérifiez les termes pour chaque marché. Lorsqu'un accent régional importe, choisissez un prémontage de voix IA disponible pour cette zone ; le clonage de voix utilise le modèle de langue de base et ne garantit pas un accent régional distinct.
Créez un glossaire pour chaque paire de langues et associez-le lors de la création du projet. Chaque projet enregistre la version du glossaire qu'il a utilisée, de sorte que la modification ultérieure d'un glossaire ne modifie jamais le travail terminé. Un glossaire ne peut pas être ajouté à un projet après sa création.
Oui, sur les forfaits avec téléchargement de fichiers SRT. Importez votre fichier SRT dans la langue cible approuvée lors de la création du projet ; un fichier SRT dans la langue source séparé est facultatif. Vous pouvez également fournir les deux fichiers si vous les avez. Rask utilise votre traduction approuvée pour le doublage.
La pertinence culturelle requiert un jugement humain. L'API offre aux réviseurs chaque segment pour adapter les références, les expressions et les exemples au marché avant la publication, et Rask peut ajouter un contrôle qualité humain au flux de travail lorsque votre équipe ne peut pas vérifier chaque vidéo.
Les points de terminaison de l'API documentés localisent la voix et les sous-titres. Le texte qui fait partie de l'image, comme les titres dans la vidéo, reste tel qu'il a été filmé. Contactez notre équipe si le texte à l'écran fait partie de votre flux de travail de localisation.
Localisez dans plusieurs langues parmi plus de 135 options linguistiques et régionales, incluant l'espagnol mexicain et européen, le portugais brésilien et européen, ainsi que le français canadien. Chaque projet prend une zone cible. La liste complète se trouve dans la documentation de l'API, et notre équipe peut discuter d'options en dehors de celle-ci.
Oui, dans les langues compatibles avec le clonage de voix. Utilisez le clonage de voix instantané pour préserver l'identité du locuteur, ou un clonage de voix personnalisé enregistré pour un présentateur récurrent. Le clonage utilise le modèle de langue de base, donc la sélection d'une zone régionale ne garantit pas l'accent de cette région. Choisissez un prémontage de voix IA disponible lorsque l'accent régional est la priorité.
La synchronisation labiale est une étape facultative pour les vidéos où une personne réelle parle devant la caméra. Exécutez-la sur la version localisée après la révision. Chaque génération de synchronisation labiale pour une vidéo complète est facturée séparément du doublage, y compris les générations effectuées après des modifications ultérieures.
L'utilisation de l'API est facturée par minute de vidéo pour chaque version linguistique, en puisant dans le même solde de minutes que l'application Rask. Les minutes supplémentaires coûtent 3 $ par minute sur les abonnements standard éligibles. Les tarifs pour les entreprises sont adaptés à votre contrat. Le nouveau doublage après révision est facturé sur la durée combinée des segments modifiés, avec un minimum d'une minute par exécution, et la synchronisation labial est facturée séparément. Testez la localisation dans l'application Rask avec un essai gratuit, sans carte bancaire requise. Pour évaluer l'API, demandez une démo à notre équipe.
Oui. Pour un volume récurrent, notre équipe peut vous aider à cartographier votre processus actuel, à définir les étapes de révision et d'approbation, à configurer la terminologie et les voix, à connecter Rask à votre CMS ou LMS, et à ajouter un contrôle qualité humain là où c'est nécessaire.
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.