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.
https://app.trychasca.com/api Konfigurieren
Installiere CLI und SDK über npm (Node 20 oder neuer):
# the chasca command
npm install -g @chasca/cli
# the SDK, in your project
npm install @chasca/sdk CLI und SDK lesen dieselben zwei Umgebungsvariablen:
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
# 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 --lengtherwartetM:SSin 30-Sekunden-Schritten bis30:00.--aspectakzeptiert16:9,9:16oder1:1.--waitlä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,voiceoderformat. Eine neue Stimme oder ein neues Format ergibt ein eigenes Video, das wie ein neues berechnet wird. --jsongibt die rohe API-Antwort aus, praktisch zum Weiterleiten per Pipe anjq.
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.
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 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
| 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.