Doku / CLI und SDK

Tools

CLI und SDK

Zwei dünne, typisierte Schichten über der API: das SDK für Code, der Videos macht, und das CLI-Tool chasca für dein Terminal, deine Skripte und deine CI.

Basis-URL https://app.trychasca.com/api

Konfigurieren

Installiere CLI und SDK über npm (Node 20 oder neuer):

Terminal
# the chasca command
npm install -g @chasca/cli

# the SDK, in your project
npm install @chasca/sdk

CLI und SDK lesen dieselben zwei Umgebungsvariablen:

Terminal
export CHASCA_API_URL=https://app.trychasca.com/api
export CHASCA_API_KEY=chk_live_...

CHASCA_API_URL ist optional, Standard ist https://app.trychasca.com/api. Schlüssel erstellst du in der App unter Settings → API keys (ab Plus).

Die chasca-CLI

Terminal
# 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
  • --length erwartet M:SS in 30-Sekunden-Schritten bis 30:00.
  • --aspect akzeptiert 16:9, 9:16 oder 1:1.
  • --wait lässt den Befehl laufen, bis das Video (oder die neue Version) fertig ist.
  • chasca change <id> <what> <value> ändert genau eine Sache: subtitles, style, reveal, music, watermark, logo, credit, voice oder format. Eine neue Stimme oder ein neues Format ergibt ein eigenes Video, das wie ein neues berechnet wird.
  • --json gibt die rohe API-Antwort aus, praktisch zum Weiterleiten per Pipe an jq.

Das TypeScript-SDK

@chasca/sdk läuft überall, wo es fetch gibt (Bun, Node 20+). Jede Antwort wird gegen dieselben Schemas validiert, die auch die API verwendet, und bei Fehlern wird immer ein ChascaError mit einem stabilen code geworfen. Dein Schlüssel bleibt privat und taucht nie in Fehlermeldungen auf.

make-a-video.ts
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);
}

Du kannst den Szenengraphen auch selbst bearbeiten und als neue Version übernehmen:

edit-graph.ts
// 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);

Methoden

Methoden von ChascaClient
Methode Beschreibung
createExplainer(params) POST /v1/explainer. Stellt ein Video in die Warteschlange und gibt den eingereihten Datensatz zurück.
waitForExplainer(id, options?) Fragt per Polling ab, bis das Video ready ist (Promise wird erfüllt) oder failed (wirft einen Fehler). Optionen: intervalMs, timeoutMs, onUpdate.
getExplainer(id) GET /v1/explainer/:id mit Szenengraph, Szenen und Versionen.
listExplainers({ limit }) GET /v1/explainer, neueste zuerst (limit 1–100).
changeExplainer(id, change) POST …/change mit genau einer Änderung. Gibt { made: "version", version } zurück, bei einer neuen Stimme oder einem neuen Format { made: "video", explainer }.
editExplainerGraph(id, sceneGraph) POST …/edit mit einem bearbeiteten Szenengraphen; gibt die eingereihte Version zurück.
waitForVersion(id, versionId, options?) Fragt per Polling ab, bis diese Version fertig ist; das Promise wird mit dem aktualisierten Erklärvideo erfüllt.
revertExplainer(id, versionId) POST …/revert. Macht eine frühere, fertige Version wieder zur aktuellen.
duplicateExplainer(id) POST …/duplicate. Gibt die Kopie zurück.
deleteExplainer(id) DELETE /v1/explainer/:id.
listVoices({ language }) GET /v1/voices. Alle Stimmen, jeweils mit Hörprobe.
listLanguages() GET /v1/languages.

Der Konstruktor lautet new ChascaClient({ apiKey, baseUrl }). Alle Methoden nehmen optional { signal } entgegen, damit du sie mit einem AbortController abbrechen kannst.