Ferramentas
CLI e SDK
Duas camadas finas e tipadas sobre a API. O SDK para o código que faz vídeos; a CLI chasca para o seu terminal, seus scripts e a sua CI.
https://app.trychasca.com/api Configuração
Instale a CLI e o SDK pelo npm (Node 20 ou mais recente):
# the chasca command
npm install -g @chasca/cli
# the SDK, in your project
npm install @chasca/sdk A CLI e o SDK leem as mesmas duas variáveis de ambiente:
export CHASCA_API_URL=https://app.trychasca.com/api
export CHASCA_API_KEY=chk_live_... CHASCA_API_URL é opcional; o padrão é https://app.trychasca.com/api. As chaves são criadas no app, em
Settings → API keys (a partir do plano Plus).
A CLI chasca
# list voices (no key needed)
chasca voices
# create a 30-second vertical video and wait for it
chasca generate "How does a heat pump work?" --length 0:30 --aspect 9:16 --wait
# check on a video
chasca status 0b9c6f2e-5d1a-4c3e-9a47-2f8e1c7d4b60
# change one thing and wait for it: subtitles, style, reveal, music, logo, credit, voice or format
chasca change 0b9c6f2e-5d1a-4c3e-9a47-2f8e1c7d4b60 subtitles off --wait
# a new voice or format makes a separate video, charged like one
chasca change 0b9c6f2e-5d1a-4c3e-9a47-2f8e1c7d4b60 format 9:16 --wait
# your latest videos
chasca list --limit 20 --lengthaceitaM:SSem incrementos de 30 segundos, até30:00.--aspectaceita16:9,9:16ou1:1.--waitmantém o comando em execução até o vídeo (ou a nova versão) ficar pronto.-
chasca change <id> <what> <value>muda só uma coisa:subtitles,style,reveal,music,watermark,logo,credit,voiceouformat. Uma voz ou um formato novos geram um vídeo separado, cobrado como um vídeo novo. --jsonimprime a resposta bruta da API, útil para passar aojqvia pipe.
O SDK para TypeScript
O @chasca/sdk roda em qualquer ambiente que tenha fetch (Bun, Node 20+). Toda resposta é validada
com os mesmos contratos que a API usa, e as falhas lançam um único tipo de erro, ChascaError, com um
code estável. Sua chave é mantida privada e nunca aparece em mensagens de erro.
import { ChascaClient, ChascaError } from '@chasca/sdk';
const chasca = new ChascaClient({
apiKey: process.env.CHASCA_API_KEY!,
baseUrl: process.env.CHASCA_API_URL ?? 'https://app.trychasca.com/api',
});
// 1. queue a video (202) and wait until it is ready
const job = await chasca.createExplainer({
input: 'How vaccines train the immune system',
length: '1:30',
aspect: '16:9',
preset: 'chalkboard',
});
const video = await chasca.waitForExplainer(job.id, {
onUpdate: (e) => console.log(e.status, e.stage, Math.round(e.progress * 100) + '%'),
});
console.log(video.videoUrl);
// 2. change one thing: a free new version of the same video, with the same narration
const change = await chasca.changeExplainer(video.id, { kind: 'style', preset: 'pencil' });
if (change.made === 'version') {
const updated = await chasca.waitForVersion(video.id, change.version.id);
console.log(updated.videoUrl);
}
// 3. errors are typed
try {
await chasca.getExplainer('not-a-real-id');
} catch (err) {
if (err instanceof ChascaError) console.error(err.status, err.code, err.message);
} Você também pode editar o grafo de cenas diretamente e salvá-lo como uma nova versão:
// edit the scene graph directly: rename a heading, then commit it as a new version
const current = await chasca.getExplainer(video.id);
const graph = structuredClone(current.sceneGraph!);
graph.scenes[0]!.heading = 'THE SNOWBALL EFFECT';
const v3 = await chasca.editExplainerGraph(video.id, graph);
await chasca.waitForVersion(video.id, v3.id); Métodos
| Método | O que faz |
|---|---|
createExplainer(params) | POST /v1/explainer. Coloca um vídeo na fila e retorna o registro enfileirado. |
waitForExplainer(id, options?) | Faz polling até o vídeo ficar pronto (resolve) ou falhar (lança um erro). Opções: intervalMs, timeoutMs, onUpdate. |
getExplainer(id) | GET /v1/explainer/:id, com o grafo de cenas, as cenas e as versões. |
listExplainers({ limit }) | GET /v1/explainer, do mais recente ao mais antigo (limit de 1 a 100). |
changeExplainer(id, change) | POST …/change com uma única mudança. Retorna { made: "version", version } ou, para uma voz ou um formato novos, { made: "video", explainer }. |
editExplainerGraph(id, sceneGraph) | POST …/edit com um grafo de cenas editado; retorna a versão enfileirada. |
waitForVersion(id, versionId, options?) | Faz polling até essa versão ficar pronta; resolve com o vídeo explicativo atualizado. |
revertExplainer(id, versionId) | POST …/revert. Torna atual uma versão anterior já concluída. |
duplicateExplainer(id) | POST …/duplicate. Retorna a cópia. |
deleteExplainer(id) | DELETE /v1/explainer/:id. |
listVoices({ language }) | GET /v1/voices. Todos os narradores, cada um com uma prévia. |
listLanguages() | GET /v1/languages. |
O construtor é new ChascaClient({ apiKey, baseUrl }). Todos os métodos aceitam um
{ signal } opcional, para que você possa cancelar com um AbortController.