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



Utwórz słownik dla każdej pary językowej, zapisz własne głosy dla stałych prowadzących i wybierz odpowiedni region dla każdego rynku, na którym publikujesz.
Prześlij oryginalne wideo raz, a następnie utwórz projekt dla każdego rynku docelowego, korzystając ze swojego słownika lub zatwierdzonego tłumaczenia zaimportowanego z pliku SRT.
Przeczytaj przetłumaczony tekst obok oryginału, edytuj fragmenty wskazane przez recenzentów, nagraj zmienione części ponownie i pobierz przetłumaczone wideo oraz napisy.
# 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 oraz es-es podobnie. Projekt rejestruje wersja_słownika, dzięki czemu późniejsze poprawki nigdy nie zmieniają ukończonej pracy w tle.API lokalizacji wideo automatycznie przekształca jeden film źródłowy w wersje dostosowane do innych rynków bezpośrednio w Twoim kodzie. Obejmuje to przetłumaczoną i zdubbingowaną mowę, napisy, spójną terminologię oraz opcjonalną synchronizację warg. Z Rask każda wersja rynkowa to projekt, który możesz utworzyć, przejrzeć i pobrać za pomocą jednego API REST.
Tłumaczenie zmienia słowa. Lokalizacja przygotowuje ten sam film z myślą o konkretnym rynku: uwzględnia wariant regionalny języka, spójne nazwy marki, głosy prelegentów, napisy oraz etap weryfikacji przed publikacją. API Rask obsługuje to wszystko w ramach jednego procesu.
Tak. Utwórz projekt dla każdego regionu docelowego, na przykład es-mx dla Meksyku i es-es dla Hiszpanii, i użyj tego samego słownika języka hiszpańskiego, aby zachować spójność terminologii marki. Sprawdź sformułowania dla każdego rynku. Jeśli akcent regionalny ma znaczenie, wybierz dostępne ustawienie wstępne głosu AI dla danego regionu; klonowanie głosu korzysta z bazowego modelu językowego i nie gwarantuje specyficznego akcentu regionalnego.
Utwórz słownik dla każdej pary językowej i dołącz go podczas tworzenia projektu. Każdy projekt rejestruje wersję użytego słownika, więc późniejsza edycja słownika nigdy nie wpływa na ukończoną pracę. Słownika nie można dodać do projektu po jego utworzeniu.
Tak, w planach z możliwością przesyłania plików SRT. Zaimportuj zatwierdzony plik SRT w języku docelowym podczas tworzenia projektu – osobny plik SRT w języku źródłowym jest opcjonalny. Możesz też dostarczyć oba pliki, jeśli je masz. Rask użyje Twojego zatwierdzonego tłumaczenia do dubbingu.
Dopasowanie kulturowe wymaga ludzkiej oceny. API udostępnia recenzentom każdy segment, aby mogli dostosować odniesienia, idiomaty i przykłady do danego rynku przed publikacją. Rask może również dodać do procesu weryfikację przez człowieka, gdy Twój zespół nie jest w stanie sprawdzić każdego filmu.
Udokumentowane punkty końcowe API lokalizują mowę oraz napisy. Tekst będący częścią obrazu, na przykład tytuły w nagraniu, pozostaje w oryginalnej formie. Skontaktuj się z naszym zespołem, jeśli tekst na ekranie jest częścią Twojego procesu lokalizacji.
Zlokalizuj materiał na wiele języków, wybierając spośród ponad 135 opcji językowych i regionalnych, w tym hiszpański meksykański i europejski, portugalski brazylijski i europejski oraz francuski kanadyjski. Każdy projekt wymaga wyboru jednego regionu docelowego. Pełna lista znajduje się w dokumentacji API, a nasz zespół chętnie omówi inne opcje.
Tak, w obsługiwanych językach z funkcją klonowania głosu. Użyj funkcji Instant Voice Clone, aby zachować tożsamość mówcy, lub zapisanej opcji Custom Voice Clone dla powracającego prezentera. Klonowanie wykorzystuje bazowy model językowy, więc wybranie regionu docelowego nie gwarantuje tamtejszego akcentu. Wybierz dostępne ustawienie wstępne głosu AI, gdy akcent regionalny jest priorytetem.
Synchronizacja warg to opcjonalny krok dla nagrań, na których prawdziwa osoba mówi przed kamerą. Uruchom ją na zlokalizowanej wersji po zakończeniu weryfikacji. Każda generacja synchronizacji warg dla całego filmu jest rozliczana oddzielnie od dubbingu, w tym również generacje po późniejszych edycjach.
Korzystanie z API jest rozliczane za każdą minutę wideo dla każdej wersji językowej, korzystając z tej samej puli minut co aplikacja Rask. Dodatkowe minuty kosztują 3 USD/min w ramach kwalifikujących się planów standardowych. Ceny dla firm są ustalane indywidualnie. Ponowne dubbingowanie po weryfikacji jest rozliczane na podstawie łącznego czasu zmienionych fragmentów, z minimum jedną minutą na uruchomienie, a synchronizacja wideo z ruchem warg jest rozliczana osobno. Wypróbuj lokalizację w aplikacji Rask w ramach bezpłatnego okresu próbnego, bez podawania karty. Aby przetestować API, umów się na demo z naszym zespołem.
Tak. W przypadku regularnych ilości materiałów nasz zespół może pomóc w odwzorowaniu Twojego obecnego procesu, zdefiniowaniu etapów weryfikacji i zatwierdzania, skonfigurowaniu terminologii i głosów, pozycjonowaniu Rask z systemem CMS lub LMS oraz dodaniu ludzkiej kontroli jakości tam, gdzie jest to potrzebne.
Dostęp do API jest oferowany w planach Creator Pro, Business i Enterprise, a jego możliwości zależą od wybranego planu. Wystarczy wygenerować identyfikator klienta oraz klucz tajny w aplikacji i od razu rozpocząć korzystanie z funkcji. Warunki dla firm, ceny hurtowe i obsługa niestandardowych języków są ustalane indywidualnie z naszym zespołem.