Herramientas
CLI y SDK
Dos capas ligeras y tipadas sobre la API: el SDK, para el código que crea videos, y la CLI chasca, para tu terminal, tus scripts y tu CI.
https://app.trychasca.com/api Configuración
Instala la CLI y el SDK desde npm (Node 20 o posterior):
# the chasca command
npm install -g @chasca/cli
# the SDK, in your project
npm install @chasca/sdk La CLI y el SDK leen las mismas dos variables de entorno:
export CHASCA_API_URL=https://app.trychasca.com/api
export CHASCA_API_KEY=chk_live_... CHASCA_API_URL es opcional; por defecto es https://app.trychasca.com/api. Las claves se crean en la app, en
Settings → API keys (Plus y planes superiores).
La 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 --lengthaceptaM:SSen tramos de 30 segundos, hasta30:00.--aspectpuede ser16:9,9:16o1:1.--waitmantiene el comando en ejecución hasta que el video (o la nueva versión) esté listo.-
chasca change <id> <what> <value>cambia una sola cosa:subtitles,style,reveal,music,watermark,logo,credit,voiceoformat. Una voz o un formato nuevos crean un video aparte, que se cobra como uno nuevo. --jsonimprime la respuesta de la API sin procesar, muy útil para pasarla ajq.
El SDK de TypeScript
@chasca/sdk funciona en cualquier entorno donde exista fetch (Bun, Node 20+). Cada respuesta
se valida con los mismos contratos que usa la API, y los fallos se lanzan como un único tipo de error,
ChascaError, con un code estable. Tu clave se mantiene privada y nunca aparece en los mensajes
de error.
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);
} También puedes editar el grafo de escenas directamente y guardarlo como una nueva versión:
// 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 | Qué hace |
|---|---|
createExplainer(params) | POST /v1/explainer. Pone en cola un video y devuelve el registro en cola. |
waitForExplainer(id, options?) | Hace polling hasta que el estado es ready (se resuelve) o failed (lanza un error). Opciones: intervalMs, timeoutMs, onUpdate. |
getExplainer(id) | GET /v1/explainer/:id con el grafo de escenas, las escenas y las versiones. |
listExplainers({ limit }) | GET /v1/explainer, del más reciente al más antiguo (limit de 1 a 100). |
changeExplainer(id, change) | POST …/change con un solo cambio. Devuelve { made: "version", version } o, para una voz o un formato nuevos, { made: "video", explainer }. |
editExplainerGraph(id, sceneGraph) | POST …/edit con un grafo de escenas editado; devuelve la versión en cola. |
waitForVersion(id, versionId, options?) | Hace polling hasta que esa versión está lista; se resuelve con el video explicativo actualizado. |
revertExplainer(id, versionId) | POST …/revert. Restaura como actual una versión anterior ya terminada. |
duplicateExplainer(id) | POST …/duplicate. Devuelve la copia. |
deleteExplainer(id) | DELETE /v1/explainer/:id. |
listVoices({ language }) | GET /v1/voices. Todos los narradores, cada uno con una muestra de audio. |
listLanguages() | GET /v1/languages. |
El constructor es new ChascaClient({ apiKey, baseUrl }). Todos los métodos aceptan un
{ signal } opcional para que puedas cancelar con un AbortController.