التوثيق / أداة CLI وحزمة SDK

الأدوات

أداة CLI وحزمة SDK

طبقتان خفيفتان ومُعرَّفتا الأنواع فوق واجهة API: حزمة SDK للكود الذي يصنع الفيديوهات، وأداة chasca لسطر الأوامر للطرفية والنصوص البرمجية وأنظمة CI.

عنوان URL الأساسي https://app.trychasca.com/api

الإعداد

ثبّت أداة CLI وحزمة SDK من npm (يتطلب Node 20 أو أحدث):

الطرفية
# the chasca command
npm install -g @chasca/cli

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

تقرأ حزمة SDK وأداة CLI متغيرَي البيئة نفسيهما:

الطرفية
export CHASCA_API_URL=https://app.trychasca.com/api
export CHASCA_API_KEY=chk_live_...

CHASCA_API_URL اختياري، وقيمته الافتراضية https://app.trychasca.com/api. وتحصل على المفاتيح من التطبيق عبر Settings → API keys (في خطة Plus وما فوقها).

أداة سطر الأوامر 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
  • يقبل --length قيمة بالصيغة M:SS بخطوات من 30 ثانية حتى 30:00.
  • قيمة --aspect هي 16:9 أو 9:16 أو 1:1.
  • يُبقي --wait الأمر قيد التشغيل حتى يجهز الفيديو (أو الإصدار الجديد).
  • يغيّر الأمر chasca change <id> <what> <value> شيئًا واحدًا: subtitles، أو style، أو reveal، أو music، أو watermark، أو logo، أو credit، أو voice، أو format. واختيار صوت جديد أو نسبة أبعاد جديدة يصنع فيديو منفصلًا، يُحتسب كأي فيديو جديد.
  • يطبع --json استجابة API الخام، وهذا مفيد لتمريرها إلى jq.

حزمة SDK بلغة TypeScript

تعمل الحزمة @chasca/sdk في أي بيئة تتوفر فيها fetch (مثل Bun، وNode 20 أو أحدث). يُتحقق من كل استجابة وفق العقود نفسها التي تستخدمها واجهة API، وكل حالات الفشل ترمي خطأً من نوع واحد هو ChascaError، مع code ثابت. ويبقى مفتاحك محميًا، ولا يظهر في رسائل الخطأ أبدًا.

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

ويمكنك أيضًا تعديل مخطط المشاهد بنفسك وحفظه كإصدار جديد:

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

الدوال

دوال ChascaClient
الدالة ما تفعله
createExplainer(params) POST /v1/explainer. يضع فيديو في قائمة الانتظار، ويُرجع سجله.
waitForExplainer(id, options?) يستعلم دوريًا حتى تصبح الحالة ready فيُرجع النتيجة، أو failed فيرمي خطأً. الخيارات: intervalMs وtimeoutMs وonUpdate.
getExplainer(id) GET /v1/explainer/:id مع مخطط المشاهد والمشاهد والإصدارات.
listExplainers({ limit }) GET /v1/explainer، الأحدث أولًا (قيمة limit من 1 إلى 100).
changeExplainer(id, change) POST …/change بتغيير واحد. يُرجع ‎{ made: "version", version }‎، أو ‎{ made: "video", explainer }‎ عند اختيار صوت جديد أو نسبة أبعاد جديدة.
editExplainerGraph(id, sceneGraph) POST …/edit بمخطط مشاهد معدَّل، ويُرجع الإصدار الجديد في قائمة الانتظار.
waitForVersion(id, versionId, options?) يستعلم دوريًا حتى يجهز ذلك الإصدار، ثم يُرجع فيديو الشرح المحدَّث.
revertExplainer(id, versionId) POST …/revert. يجعل إصدارًا سابقًا مكتملًا هو الإصدار الحالي.
duplicateExplainer(id) POST …/duplicate. يُرجع النسخة.
deleteExplainer(id) DELETE /v1/explainer/:id
listVoices({ language }) GET /v1/voices. كل الرواة، ولكلٍّ منهم معاينة.
listLanguages() GET /v1/languages

المُنشئ هو new ChascaClient({ apiKey, baseUrl }). وتقبل كل الدوال وسيطًا اختياريًا { signal } لتتمكن من الإلغاء باستخدام AbortController.