# 1. send your script as timed segments - one speaker per line
curl -X POST https://api.rask.ai/v2/transcriptions \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}}
]}'
# 2. voice the script over your video
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\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}"# When status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_audio, translated_video}'



Envie a gravação de vídeo ou áudio à qual a sua locução pertence, usando um arquivo ou uma URL de mídia compatível. A linha do tempo fornece o tempo exato para o seu roteiro.
Crie uma transcrição a partir de segmentos de texto com carimbos de data/hora e palestrantes, ou a partir de um arquivo SRT. Em seguida, crie o projeto com o seu transcript_id e um idioma de destino.
Liste as vozes, atribua uma predefinição ou uma voz clonada a cada palestrante, regenere se necessário e baixe a locução, o vídeo e os arquivos de legenda.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
async def wait(client, job):
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)
script = await client.create_transcription(data=schemas.TranscriptionCreate(segments=[
schemas.SegmentCreate(speaker="SPEAKER_00", start="00:00:00,500", end="00:00:04,800",
src=schemas.SegmentTextCreatePatch(text="Welcome to the new dashboard.", lang="en"),
dst=schemas.SegmentTextCreatePatch(text="Bienvenido al nuevo panel.", lang="es-mx")),
]))
job = await wait(client, await client.create_project(data=schemas.ProjectCreate(
video_id=VIDEO_ID, dst_lang="es-mx", transcript_id=script.id)))
# pick a female AI voice preset from the library for SPEAKER_00
voices = await client.get_project_voices(project_id=job.id)
preset = next(v for v in voices if v.gender == "female")
await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice={**job.voice, "SPEAKER_00": preset.id}))
job = await wait(client, await client.generate_project(project_id=job.id))
print(job.voiceover, job.translated_video)
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}"}
def wait(pid):
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
time.sleep(10)
return p
script = requests.post(f"{API}/v2/transcriptions", headers=h, json={"segments": [
{"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
"src": {"text": "Welcome to the new dashboard.", "lang": "en"},
"dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}},
]}).json()
pid = requests.post(f"{API}/v2/projects", headers=h, json={
"video_id": VIDEO_ID, "dst_lang": "es-mx", "transcript_id": script["id"]}).json()["id"]
project = wait(pid)
voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
preset = next(v for v in voices if v["gender"] == "female")
requests.patch(f"{API}/v2/projects/{pid}", headers=h,
json={"voice": {**project["voice"], "SPEAKER_00": preset["id"]}})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["voiceover"])// 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 wait = async (id) => { let p; while ((p = await call('GET', `/v2/projects/${id}`)).status !== 'merging_done') await sleep(10000); return p; };
const script = await call('POST', '/v2/transcriptions', { segments: [
{ speaker: 'SPEAKER_00', start: '00:00:00,500', end: '00:00:04,800',
src: { text: 'Welcome to the new dashboard.', lang: 'en' },
dst: { text: 'Bienvenido al nuevo panel.', lang: 'es-mx' } },
] });
const { id } = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang: 'es-mx', transcript_id: script.id });
const project = await wait(id);
const voices = await call('GET', `/v2/projects/${id}/voices`);
const preset = voices.find((v) => v.gender === 'female');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: preset.id } });
await call('POST', `/v2/projects/${id}/generate`);
console.log((await wait(id)).voiceover);# 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. your script as an SRT file in the target language
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?dst_lang=es-mx" \
-H "Authorization: Bearer $TOKEN" -F "dst=@script_es-mx.srt" | jq -r .id)
# 3. voice it over the video
ID=$(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\"}" | jq -r .id)
# 4. when status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
| jq '{status, voiceover, translated_video}'<?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']];
$script = $json($http->post('/v2/transcriptions', ['headers' => $h, 'json' => ['segments' => [[
'speaker' => 'SPEAKER_00', 'start' => '00:00:00,500', 'end' => '00:00:04,800',
'src' => ['text' => 'Welcome to the new dashboard.', 'lang' => 'en'],
'dst' => ['text' => 'Bienvenido al nuevo panel.', 'lang' => 'es-mx'],
]]]]));
$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
'video_id' => $videoId, 'dst_lang' => 'es-mx', 'transcript_id' => $script['id']]]));
while ($p['status'] !== 'merging_done') {
sleep(10);
$p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['voiceover'];{"label": "Renata", "gender": "female", "sample_src": "https://..."} AI voice preset
{"label": "Gerardo", "gender": "male", "sample_src": "https://..."} AI voice preset
{"label": "Maria Lopez", "gender": "auto", "sample_src": "https://..."} custom voice clone
{"label": "Voice Clone", "gender": "auto", "sample_src": null} instant voice clone

pt-br e pt-pt igualmente. O registro do projeto versão_do_glossário, garantindo que edições futuras nunca alterem o que já foi finalizado sem que você perceba.Sim, para locução de vídeos. Envie seu roteiro como trechos de texto com marcação de tempo ou um arquivo SRT junto com um vídeo, e a API gera uma fala com som natural sincronizada com a imagem, usando vozes de IA ou clones de voz, com legendas e faixas de áudio no mesmo projeto.
A Rask gera fala para projetos completos e entrega os arquivos, o que é ideal para vídeos publicados, conteúdos de treinamento e marketing. Para agentes de voz, centrais de atendimento e outras aplicações de baixa latência que precisam de áudio em segundos, uma API de conversão de texto em fala com streaming é a melhor opção.
O áudio é entregue assim que a geração do projeto é concluída: a locução em formato WAV (nos planos elegíveis), o áudio misturado e o vídeo. A API não transmite partes ou bytes de áudio via streaming durante o processo de geração.
Crie uma transcrição usando POST /v2/transcriptions a partir de trechos que contenham um locutor, horários de início e término no formato HH:MM:SS,mmm e o texto. Você também pode enviar um arquivo SRT para POST /v2/transcriptions/srt. Em seguida, informe o transcript_id ao criar o projeto.
Cada idioma de destino possui predefinições de voz de IA com gêneros definidos na biblioteca de vozes. Obtenha as opções para um projeto com GET /v2/projects/{id}/voices e atribua uma voz por locutor usando o ID da voz. Nos idiomas compatíveis com clonagem de voz, você também pode usar clones de voz.
Sim. Crie um clone de voz personalizado uma vez no aplicativo da Rask com o consentimento do locutor e, em seguida, atribua o ID da voz a qualquer locutor por meio da API nos idiomas compatíveis com clonagem de voz. Essa opção funciona muito bem para manter uma voz de marca consistente.
Escolha entre mais de 135 opções de idiomas e regiões. Escreva o roteiro em um idioma e a Rask fará a tradução, ou envie o roteiro já no idioma de destino. Vozes de IA estão disponíveis para todos os locais de destino.
A API aceita texto simples por trecho. Para orientar a pronúncia, ajuste a grafia no texto do roteiro. Os glossários controlam como os termos são traduzidos, não como são pronunciados.
A fala segue a voz selecionada e o seu texto, incluindo a pontuação. Para obter uma variedade emocional semelhante à de uma atuação real, um clone de voz do locutor original preserva melhor a identidade vocal dele.
Você pode usar um vídeo ou uma gravação de áudio. Envie a mídia de origem e forneça um roteiro com marcação de tempo para gerar a locução ao longo da linha do tempo. O envio de um arquivo de mídia é obrigatório.
Não. O uso é cobrado por minuto de vídeo, arredondado para o próximo minuto inteiro, a partir do mesmo pacote de minutos do app da Rask. Minutos adicionais custam US$ 3/min nos planos padrão elegíveis. Os preços para empresas são personalizados de acordo com o seu contrato. O novo doblaje é cobrado com base nos trechos alterados, com um mínimo de um minuto por execução cobrada.
Comece com um teste grátis no app da Rask, sem precisar de cartão, para ouvir as vozes no seu próprio vídeo. O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com recursos definidos de acordo com o seu plano.
O acesso à API está disponível nos planos Creator Pro, Business e Enterprise, com recursos definidos de acordo com o seu plano. Você gera seu ID de cliente e chave secreta no aplicativo e pode começar a fazer chamadas imediatamente. Condições para empresas, preços por volume e suporte a idiomas personalizados são tratados diretamente com a nossa equipe.