Documentation / CLI et SDK

Outils

CLI et SDK

Deux couches légères et typées au-dessus de l’API. Le SDK pour le code qui crée des vidéos ; la CLI chasca pour votre terminal, vos scripts et votre CI.

URL de base https://app.trychasca.com/api

Configurer

Installez la CLI et le SDK depuis npm (Node 20 ou plus récent) :

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

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

La CLI et le SDK lisent les deux mêmes variables d’environnement :

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

CHASCA_API_URL est facultative, avec https://app.trychasca.com/api par défaut. Les clés se créent dans l’application, sous Settings → API keys (offre Plus ou supérieure).

La CLI chasca

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 accepte M:SS par paliers de 30 secondes, jusqu’à 30:00.
  • --aspect accepte 16:9, 9:16 ou 1:1.
  • --wait ne rend la main qu’une fois la vidéo (ou la nouvelle version) prête.
  • chasca change <id> <what> <value> modifie un seul élément : subtitles, style, reveal, music, watermark, logo, credit, voice ou format. Une nouvelle voix ou un nouveau format crée une vidéo distincte, facturée comme telle.
  • --json affiche la réponse brute de l’API, pratique pour la rediriger vers jq.

Le SDK TypeScript

@chasca/sdk fonctionne partout où fetch existe (Bun, Node 20+). Chaque réponse est validée selon les mêmes contrats que ceux de l’API, et tous les échecs lèvent une erreur d’un seul type, ChascaError, avec un code stable. Votre clé reste privée et n’apparaît jamais dans les messages d’erreur.

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);
}

Vous pouvez aussi modifier vous-même le graphe de scènes et l’enregistrer comme nouvelle version :

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);

Méthodes

Méthodes de ChascaClient
Méthode Description
createExplainer(params) POST /v1/explainer. Met une vidéo en file d’attente ; renvoie l’enregistrement créé.
waitForExplainer(id, options?) Interroge l’API jusqu’à l’état ready (la promesse est résolue) ou failed (une erreur est levée). Options : intervalMs, timeoutMs, onUpdate.
getExplainer(id) GET /v1/explainer/:id, avec le graphe de scènes, les scènes et les versions.
listExplainers({ limit }) GET /v1/explainer, de la plus récente à la plus ancienne (limit de 1 à 100).
changeExplainer(id, change) POST …/change avec un seul changement. Renvoie { made: "version", version }, ou { made: "video", explainer } pour une nouvelle voix ou un nouveau format.
editExplainerGraph(id, sceneGraph) POST …/edit avec un graphe de scènes modifié ; renvoie la version en file d’attente.
waitForVersion(id, versionId, options?) Interroge l’API jusqu’à ce que cette version soit prête ; la promesse est résolue avec la vidéo explicative mise à jour.
revertExplainer(id, versionId) POST …/revert. Rétablit une version antérieure terminée comme version courante.
duplicateExplainer(id) POST …/duplicate. Renvoie la copie.
deleteExplainer(id) DELETE /v1/explainer/:id.
listVoices({ language }) GET /v1/voices. Tous les narrateurs, chacun avec un extrait audio.
listLanguages() GET /v1/languages.

Le constructeur est new ChascaClient({ apiKey, baseUrl }). Toutes les méthodes acceptent un paramètre facultatif { signal }, qui permet d’annuler l’appel avec un AbortController.