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



أنشئ مسرد مصطلحات لكل لغة، واحفظ أصواتاً مخصصة للمتحدثين المتكررين، واختار اللهجة المحلية المناسبة لكل سوق تستهدف النشر فيه.
قم برفع الفيديو الأصلي مرة واحدة، ثم أنشئ مشروعاً لكل سوق مستهدف باستخدام مسرد المصطلحات الخاص بك، أو باستخدام ترجمة معتمدة يتم استيرادها من ملفات SRT.
اقرأ النص المترجم جنباً إلى جنب، وقم بتعديل ما يحدده المراجعون، وأعد دبلجة الأجزاء المعدلة، ثم قم بتحميل الفيديو المترجم والترجمات النصية.
# 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 و es-es على حد سواء. يسجل المشروع glossary_version، بحيث لا تؤدي التعديلات لاحقاً إلى تغيير العمل المكتمل دون ملاحظة ذلك.تعمل واجهة برمجة تطبيقات توطين الفيديو على تحويل فيديو أساسي واحد إلى إصدارات مختلفة لتناسب الأسواق الأخرى من خلال الأتمتة في التعليمات البرمجية الخاصة بك: الكلام المترجم والمصنوع صوتياً، والترجمة النصية، والمصطلحات الثسابتة، ومزامنة الشفاه الاختيارية. مع Rask، كل إصدار خاص بسوق معين هو مشروع تقوم بإنشائه ومراجعته وتنزيله من خلال واجهة برمجة تطبيقات REST واحدة.
تغير الترجمة الكلمات وحدها، بينما يجهز التوطين نفس الفيديو لسوق معين: اللهجة الإقليمية، والمصطلحات التجارية التي تظل ثابتة، وأصوات المتحدثين، والترجمة النصية، ومرحلة مراجعة قبل النشر. تدعم واجهة برمجة تطبيقات Rask كل هذه الخطوات في سير عمل واحد.
نعم. أنشئ مشروعاً لكل منطقة مستهدفة، مثل es-mx للمكسيك و es-es لإسبانيا، وأعد استخدام مسرد إسباني واحد للحفاظ على ثبات مصطلحات علامتك التجارية. راجع الصياغة لكل سوق. عندما تكون اللهجة الإقليمية مهمة، اختر صوتاً جاهزاً بالذكاء الاصطناعي لتلك المنطقة؛ فنظام استنساخ الصوت يعتمد على نموذج اللغة الأساسي ولا يضمن لهجة إقليمية مميزة.
أنشئ مسرداً لكل زوج من اللغات وأرفقه عند إنشاء المشروع. يسجل كل مشروع إصدار المسرد الذي استخدمه، لذا فإن تعديل المسرد لاحقاً لا يؤدي أبداً إلى تغيير العمل المنتهي. لا يمكن إضافة مسرد إلى المشروع بعد إنشائه.
نعم، في الخطط التي تتيح رفع ملفات SRT. استورد ملف SRT باللغة المستهدفة الموافق عليه عند إنشاء المشروع؛ أما ملف SRT للغة المصدر فهو اختياري. يمكنك أيضاً توفير الملفين معاً عندما يكونان متاحين لديك. تستخدم Rask ترجمتك الموافق عليها للدبلجة.
تتطلب الملائمة الثقافية تدخلاً بشرياً. تمنح واجهة برمجة التطبيقات المراجعين كل جزء لتكييف الإشارات، والتعابير، والأمثلة بما يناسب السوق قبل النشر، ويمكن لـ Rask إضافة مراجعة بشرية لجودة العمل عندما يتعذر على فريقك مراجعة كل فيديو.
تعمل نقاط نهاية واجهة برمجة التطبيقات الموثقة على توطين الكلام والترجمة النصية. أما النصوص التي تعد جزءاً من الصورة، مثل العناوين في اللقطات المصورة، فتظل كما تم تصويرها. تحدث إلى فريقنا إذا كان النص الظاهر على الشاشة جزءاً من سير عمل التوطين الخاص بك.
قم بتوطين المحتوى إلى عدة لغات من بين أكثر من 135 لغة وخياراً إقليمياً، بما في ذلك الإسبانية المكسيكية والأوروبية، والبرتغالية البرازيلية والأوروبية، والفرنسية الكندية. يتطلب كل مشروع منطقة مستهدفة واحدة. تجد القائمة الكاملة في وثائق واجهة برمجة التطبيقات، ويمكن لفريقنا مناقشة خيارات أخرى خارجها.
نعم، في لغات استنساخ الصوت المدعومة. استخدم ميزة استنساخ الصوت الفوري للحفاظ على هوية المتحدث، أو ميزة استنساخ الصوت المخصصة والمحفوظة لمقدم برنامج متكرر. يستخدم الاستنساخ نموذج اللغة الأساسي، لذا فإن اختيار منطقة معينة لا يضمن الحصول على لهجة تلك المنطقة. اختر صوتاً جاهزاً بالذكاء الاصطناعي عندما تكون اللهجة الإقليمية هي الأولوية.
مزامنة الشفاه هي خطوة اختيارية للمقاطع التي يتحدث فيها شخص حقيقي أمام الكاميرا. قم بتشغيلها على الإصدار الموطن بعد مراجعته. يتم احتساب رسوم كل عملية إنشاء لمزامنة الشفاه للفيديو بالكامل بشكل منفصل عن الدبلجة، بما في ذلك عمليات الإنشاء التي تتم بعد التعديلات اللاحقة.
تُحتسب تكلفة استخدام واجهة برمجة التطبيقات لكل دقيقة فيديو لكل إصدار سوقي، وذلك من نفس رصيد الدقائق الخاص بتطبيق Rask. تكلفة الدقائق الإضافية هي 3 دولارات للدقيقة في الخطط القياسية المؤهلة. يتم تصميم أسعار الشركات الكبرى بما يتناسب مع اتفاقك. تُحتسب تكلفة إعادة الدبلجة بعد المراجعة بناءً على المدة الإجمالية للمقاطع المعدلة، وبحد أدنى دقيقة واحدة لكل تشغيل، بينما تُحتسب تكلفة مزامنة الشفاه بشكل منفصل. جرب التوطين في تطبيق Rask من خلال التجربة المجانية، دون الحاجة بطاقة ائتمانية. لتقييم واجهة برمجة التطبيقات، احجز عرضاً توضيحياً مع فريقنا.
نعم. بالنسبة للمحتوى المتكرر، يمكن لفريقنا مساعدتك في تنظيم خطوات العمل الحالية، وتحديد مراحل المراجعة والاعتماد، وضبط المصطلحات والأصوات، وربط Rask بنظام إدارة المحتوى أو التعلم لديك، بالإضافة إلى إضافة مراجعة بشرية عند الحاجة.
تتوفر إمكانية الوصول ضمن خطط Creator Pro، وBusiness، وEnterprise، وتتحدد الميزات بناءً على خطتك. يمكنك إنشاء معرف العميل والرمز السري الخاص بك في التطبيق والبدء في الاستخدام فوراً. أما بالنسبة لشروط خطة Enterprise، وأسعار الكميات الكبيرة، ودعم اللغات المخصصة، فيمكنك التواصل مع فريقنا.