# 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 vos présentateurs habituels et choisissez la région cible de chaque marché.
Téléchargez la vidéo source une seule fois, puis créez un projet pour chaque région en y appliquant votre glossaire ou une traduction validée importée au format SRT.
Comparez le texte traduit côte à côte, modifiez les passages signalés, doublez à nouveau les segments modifiés et téléchargez la vidéo et les sous-titres localisés.
# 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 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.Une API de localisation vidéo transforme une vidéo source en différentes versions adaptées à 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, la 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 au sein d'un même flux de travail.
Oui. Créez un projet pour chaque zone géographique cible (par exemple, es-mx pour le Mexique et es-es pour l'Espagne) et réutilisez un glossaire espagnol pour garantir des termes de marque cohérents. Vérifiez le texte pour chaque marché. Lorsqu'un accent régional est important, choisissez une voix IA prédéfinie disponible pour cette région ; 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 utilisée, de sorte que la modification ultérieure d'un glossaire n'affecte jamais le travail déjà terminé. Il n'est pas possible d'ajouter un glossaire à un projet une fois celui-ci créé.
Oui, sur les abonnements proposant le téléchargement de fichiers SRT. Importez votre fichier SRT approuvé dans la langue cible lors de la création du projet ; un fichier SRT source séparé est optionnel. 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 fournit aux réviseurs chaque segment pour adapter les références, les expressions et les exemples au marché avant la publication, et Rask peut intégrer un contrôle qualité humain dans le flux de travail si votre équipe ne peut pas visionner 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 les séquences vidéo, reste tel qu'il a été filmique. Contactez notre équipe si le texte à l'écran fait partie de votre processus de localisation.
Localisez vos contenus dans plusieurs langues parmi plus de 135 options de langues et régionales, incluant l'espagnol du Mexique et d'Europe, le portugais du Brésil et d'Europe, ainsi que le français canadien. Chaque projet correspond à une seule zone géographique cible. La liste complète se trouve dans la documentation de l'API, et notre équipe peut étudier avec vous des options en dehors de cette liste.
Oui, dans les langues compatibles avec le clonage vocal. Utilisez le clonage vocal instantané pour préserver l'identité de l'intervenant, ou un clonage vocal personnalisé enregistré pour un présentateur régulier. Le clonage utilise le modèle de langue de base, donc la sélection d'une région ne garantit pas l'accent de cette région. Choisissez une voix IA prédéfinie lorsque l'accent régional est votre priorité.
La synchronisation labiale est une étape optionnelle pour les vidéos où une personne réelle s'exprime face caméra. Appliquez-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 suite à des modifications ultérieures.
L'utilisation de l'API est facturée à la 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 $/min sur les abonnements standard éligibles. Les tarifs pour les entreprises sont adaptés à votre contrat. Le doublage après révision est facturé selon la durée cumulée des segments modifiés, avec un minimum d'une minute par exécution, et la synchronisation labiale 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égulier, notre équipe peut vous aider à cartographier votre processus actuel, à définir les étapes de validation, à configurer le lexique et les voix, à connecter Rask à votre CMS ou LMS, et à intégrer une vérification humaine si nécessaire.
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.