# 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}'



Crea un glossario per ogni combinazione di lingue, salva le voci personalizzate per i presentatori ricorrenti e scegli la variante regionale per ogni mercato in cui pubblichi.
Carica il video originale una sola volta, quindi crea un progetto per ciascuna lingua di arrivo usando il tuo glossario o una traduzione approvata importata da un file SRT.
Leggi il testo tradotto affiancato, modifica ciò che viene segnalato dai revisori, crea nuovamente il doppiaggio per i segmenti modificati e scarica il video localizzato e i sottotitoli.
# 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 e es-es allo stesso modo. Il progetto registra glossary_version, così le modifiche successive non alterano mai inaspettatamente il lavoro completato.Un'API di localizzazione video trasforma un video di partenza in diverse versioni per altri mercati tramite l'automazione nel tuo codice: parlato tradotto e doppiato, sottotitoli, terminologia coerente e sincronizzazione labial facoltativa. Con Rask, ogni versione per il mercato è un progetto che puoi creare, rivedere e scaricare tramite una singola API REST.
La traduzione cambia le parole. La localizzazione prepara lo stesso video per un mercato specifico: la variante linguistica regionale, i termini del marchio che rimangono coerenti, le voci dei relatori, i sottotitoli e una fase di revisione prima della pubblicazione. L'API di Rask supporta tutti questi elementi in un unico flusso di lavoro.
Sì. Crea un progetto per ogni area geografica di arrivo, come es-mx per il Messico e es-es per la Spagna, e riutilizza un glossario in spagnolo per mantenere coerenti i termini del marchio. Rivedi la formulazione per ciascun mercato. Quando un accento regionale è importante, scegli una voce AI predefinita disponibile per quell'area geografica; la clonazione vocale utilizza il modello linguistico di base e non garantisce un accento regionale distinto.
Crea un glossario per ogni coppia di lingue e collegalo quando crei il progetto. Ogni progetto registra la versione del glossario utilizzata, quindi modificare un glossario in un secondo momento non cambia mai il lavoro completato. Non è possibile aggiungere un glossario a un progetto dopo che è stato creato.
Sì, sui piani con caricamento SRT. Importa il tuo file SRT nella lingua di arrivo approvato quando crei il progetto; un file SRT nella lingua di partenza separato è facoltativo. Puoi anche fornire entrambi i file quando li hai. Rask utilizza la tua traduzione approvata per il doppiaggio.
La rilevanza culturale richiede il giudizio umano. L'API offre ai revisori ogni segmento per adattare riferimenti, modi di dire ed esempi per il mercato prima della pubblicazione, e Rask può aggiungere il controllo qualità umano al flusso di lavoro quando il tuo team non può esaminare ogni video.
Gli endpoint API documentati localizzano il parlato e i sottotitoli. Il testo che fa parte dell'immagine, come i titoli nel filmato, rimane così come è stato girato. Parla con il nostro team se il testo sullo schermo fa parte del tuo flusso di lavoro di localizzazione.
Localizza in più lingue tra oltre 135 opzioni linguistiche e regionali, tra cui spagnolo messicano ed europeo, portoghese brasiliano ed europeo e francese canadese. Ogni progetto richiede un'area geografica di arrivo. L'elenco completo è nella documentazione dell'API e il nostro team può discutere opzioni al di fuori di esso.
Sì, nelle lingue supportate per la clonazione vocale. Usa la clonazione vocale istantanea per preservare l'identità dello speaker, o una clonazione vocale personalizzata salvata per un presentatore ricorrente. La clonazione utilizza il modello linguistico di base, quindi la selezione di un'area geografica locale non garantisce l'accento di quella regione. Scegli una voce AI predefinita disponibile quando l'accento regionale è la priorità.
La sincronizzazione labiale è un passaggio facoltativo per i filmati in cui una persona reale parla davanti alla telecamera. Eseguila sulla versione localizzata dopo la revisione. Ogni generazione di sincronizzazione labiale per l'intero video viene fatturata separatamente dal doppiaggio, comprese le generazioni successive a modifiche successive.
L'utilizzo dell'API viene fatturato al minuto di video per ogni versione linguistica, utilizzando lo stesso pacchetto di minuti dell'app Rask. I minuti aggiuntivi costano 3$ al minuto sui piani standard idonei. I prezzi per le aziende sono personalizzati in base al contratto. Il nuovo doppiaggio dopo la revisione viene fatturato in base alla durata combinata dei segmenti modificati, con un minimo di un minuto per esecuzione, mentre la sincronizzazione labial è fatturata separatamente. Prova la localizzazione nell'app Rask con una prova gratuita, senza carta di credito. Per valutare l'API, prenota una demo con il nostro team.
Sì. Per volumi ricorrenti, il nostro team può aiutarti a mappare il processo attuale, definire le fasi di revisione e approvazione, configurare la terminologia e le voci, collegare Rask al tuo CMS o LMS e aggiungere il controllo qualità umano dove necessario.
L'accesso alle API è disponibile nei piani Creator Pro, Business ed Enterprise, con funzioni che variano a seconda del piano scelto. Potete generare l'ID cliente e la password segreta direttamente nell'app e iniziare subito a effettuare chiamate. Per le condizioni dedicate alle aziende, i prezzi per grandi volumi e la copertura di lingue personalizzate, potete rivolgervi al nostro team.