Felo API PlatformFelo API Platform

محتوا

ویدیوی motion graphics با HTML و Opus 5.5 بسازید

یک beat sheet بنویسید، از Opus 5.5 بخواهید صحنه HTML قطعی را از طریق Felo API بنویسد، فریم‌ها را با Playwright بگیرید و MP4 را با ffmpeg کدگذاری کنید. در WorkBuddy، ChatGPT با اجرای کد، Codex، Pi Agent یا Claude Code کار می‌کند.

زمان۴۵ دقیقهسطحمتوسطبه‌روزرسانی2026-10-30
برای چه کسانیسازندگانطراحان motionتوسعه‌دهندگان مستقل

کپی پرامپت

فیلدهای داخل قلاب را جایگزین کنید و در Claude Code، Codex یا هوش مصنوعی با دسترسی ترمینال بچسبانید. مهارت Felo را نصب می‌کند، پیش از خرج اعتبار می‌پرسد و گردش‌کار را اجرا می‌کند.

ویدیویی [مدت] ثانیه‌ای، قالب [عمودی / افقی]، درباره [ایده] بسازید.
سبک: [سبک]. مخاطب: [مخاطب]. صدا: [بدون صدا / آهنگ دارای مجوز در ./audio.mp3 / TTS].

شما در پوشه‌ای با ترمینال و [WorkBuddy / ChatGPT با اجرای کد / Codex / Pi Agent / Claude Code] کار می‌کنید. اگر نمی‌توانید Node و مرورگر headless را اجرا کنید، متوقف شوید و به من بگویید، وانمود نکنید که رندر کرده‌اید.

به این ترتیب پیش بروید:
1. یک استوری‌بورد ۳ تا ۶ بیتی با ثانیه شروع و پایان دقیق بنویسید.
2. مرحله HTML: Claude Opus 5.5 را از طریق Felo API صدا بزنید. از شناسه مدل claude-opus-5-5 و FELO_API_KEY من استفاده کنید. از من اشتراک Claude یا کلید Anthropic دیگر نخواهید.
3. از Opus یک فایل HTML خودکفا بخواهید: window.DURATION را تنظیم کند و async window.seek(t) را ارائه دهد. بدون دارایی خارجی، CDN، Date.now()، requestAnimationFrame()، انتقال CSS یا تایمر. همه مقادیر تصادفی را seed کنید تا همان t همیشه همان فریم را رسم کند.
4. در t = 0، ۲۵٪، ۵۰٪، ۷۵٪ و فریم آخر پیش‌نمایش بگیرید. پیش از رندر کامل، سرریز، برش، فونت و نواحی امن را بررسی کنید.
5. هر فریم را با Playwright رندر کنید، با ffmpeg به H.264 کدگذاری کنید و اگر مسیر صوتی دارد آن را mux کنید.
6. فریم اول، فریم آخر و مسیر فایل نهایی را نشان دهید. منتشر نکنید.

قواعد:
- پیش از مصرف اعتبار، فراخوانی‌های Felo API و برآورد توکن را نشان دهید.
- فقط از متن من استفاده کنید، یا متن جایگزین ساختگی را واضح علامت بزنید.
- از مواد، موسیقی، لوگو یا فونت دارای حق نشر استفاده نکنید. فقط فونت سیستم و شکل‌های تولیدشده.
- مگر اینکه صریحاً نسخه بلند بخواهم، ویدیوی نهایی زیر ۳۰ ثانیه باشد.
- همه چیز را در ./video/ بنویسید و دستورهای اجراشده را خلاصه کنید.

نسخه شامل مراحل نصب و قواعد ایمنی نیز هست.

چه دریافت می‌کنید

خروجی نمونه یک اجرا. نه تولید زنده.

نمونه گزارش رندر (بخش)

گزارش رندر

صحنه: video/scene.html (18 KB) مدت: ۱۲ ثانیه · 1080x1920 · 30fps · ۳۶۰ فریم بررسی: window.DURATION = 12 · seek(t) موجود · بدون Date.now / rAF / تایمر

پیش‌نمایش: preview-0ms.png · preview-3000ms.png · preview-6000ms.png · preview-9000ms.png کدگذاری: video/video.mp4 (H.264، ۳۶۰ فریم) صدا: video/final.mp4 (AAC، ۱۲.۰ ثانیه)

فراخوانی‌های دقیق

برای توسعه‌دهندگان: همان گردش‌کار به‌صورت کد، به ترتیب اجرا.

نمایش فراخوانی‌های واقعی API
  1. اول beat sheet بنویسید

    مدت و ۳ تا ۶ بیت را تعیین کنید، هر بیت با شروع، پایان، متن روی صفحه و تغییر بصری اصلی.

  2. صحنه HTML را با Opus 5.5 بسازید

    Anthropic SDK را به base URL فلو هدایت کنید، claude-opus-5-5 را به کار ببرید و فقط HTML با window.DURATION و async seek(t) بخواهید.

    generate-scene.ts
    import { mkdir, writeFile } from "node:fs/promises";
    import Anthropic from "@anthropic-ai/sdk";
    
    const SYSTEM = `You write a single, self-contained HTML video scene.
    Requirements:
    - 1080x1920 (or 1920x1080), no external assets, system fonts only.
    - set window.DURATION = <seconds>.
    - expose async window.seek(t) that draws the frame for time t.
    - no Date.now(), no requestAnimationFrame(), no CSS transitions, no timers.
    - seed every random value; the same t must always produce the same frame.
    - return only the HTML file, no markdown fences.`;
    
    const brief = `12-second vertical motion graphic about [idea].
    Beats: [0-3s hook], [3-7s point], [7-10s proof], [10-12s CTA].
    Palette: [colors]. Type: system sans. Keep text inside a 64px safe area.`;
    
    const anthropic = new Anthropic({
      apiKey: process.env.FELO_API_KEY,
      baseURL: "https://openapi.felo.ai/api",
    });
    
    const message = await anthropic.messages.create({
      model: "claude-opus-5-5",
      max_tokens: 32000,
      system: SYSTEM,
      messages: [{ role: "user", content: brief }],
    });
    
    const raw = message.content
      .filter((block) => block.type === "text")
      .map((block) => block.text)
      .join("");
    
    const html = raw.replace(/^```(?:html)?\s*/i, "").replace(/```\s*$/, "").trim();
    await mkdir("video", { recursive: true });
    await writeFile("video/scene.html", html);
    console.log(`scene.html: ${html.length} bytes`);

    خروجی نمونه

    scene.html: 18432 bytes
  3. قطعیت و پیش‌نمایش را بررسی کنید

    در t=0، ۲۵٪، ۵۰٪، ۷۵٪ و فریم آخر اسکرین‌شات بگیرید و سرریز متن، فونت و نواحی امن را بررسی کنید.

    preview.ts
    import { chromium } from "playwright";
    import { pathToFileURL } from "node:url";
    
    const browser = await chromium.launch();
    const page = await browser.newPage({
      viewport: { width: 1080, height: 1920 },
      deviceScaleFactor: 1,
    });
    
    await page.goto(pathToFileURL("video/scene.html").href);
    await page.waitForFunction(() => typeof (window as any).seek === "function");
    
    const duration = await page.evaluate(() => (window as any).DURATION as number);
    for (const t of [0, duration * 0.25, duration * 0.5, duration * 0.75]) {
      await page.evaluate(async (time) => {
        await (window as any).seek(time);
      }, t);
      await page.screenshot({ path: `video/preview-${Math.round(t * 1000)}ms.png` });
    }
    
    await browser.close();
    console.log(`duration ${duration}s`);

    خروجی نمونه

    duration 12s
    video/preview-0ms.png
    video/preview-3000ms.png
    video/preview-6000ms.png
    video/preview-9000ms.png
  4. همه فریم‌ها را رندر و کدگذاری کنید

    seek(t) را با t = frame / fps صدا بزنید، فریم‌ها را بگیرید و H.264 را با ffmpeg کدگذاری کنید.

    render.ts
    import { spawn } from "node:child_process";
    import { mkdir, rm } from "node:fs/promises";
    import { pathToFileURL } from "node:url";
    import { chromium } from "playwright";
    
    const FPS = 30;
    
    const browser = await chromium.launch();
    const page = await browser.newPage({
      viewport: { width: 1080, height: 1920 },
      deviceScaleFactor: 1,
    });
    await page.goto(pathToFileURL("video/scene.html").href);
    await page.waitForFunction(() => typeof (window as any).seek === "function");
    
    const duration = await page.evaluate(() => (window as any).DURATION as number);
    const frames = Math.ceil(duration * FPS);
    
    await rm("video/frames", { recursive: true, force: true });
    await mkdir("video/frames", { recursive: true });
    
    for (let frame = 0; frame < frames; frame++) {
      await page.evaluate(async (time) => {
        await (window as any).seek(time);
      }, frame / FPS);
      await page.screenshot({
        path: `video/frames/${String(frame).padStart(5, "0")}.png`,
      });
    }
    await browser.close();
    
    const ffmpeg = spawn("ffmpeg", [
      "-y",
      "-framerate", String(FPS),
      "-i", "video/frames/%05d.png",
      "-c:v", "libx264",
      "-pix_fmt", "yuv420p",
      "-movflags", "+faststart",
      "video/video.mp4",
    ], { stdio: "inherit" });
    
    await new Promise<void>((resolve, reject) => {
      ffmpeg.on("exit", (code) => {
        if (code === 0) resolve();
        else reject(new Error(`ffmpeg exited with ${code}`));
      });
    });
    
    console.log(`${frames} frames -> video/video.mp4`);

    خروجی نمونه

    360 frames -> video/video.mp4
  5. صدا را mux و کامل تماشا کنید

    مسیر دارای مجوز را با -c:v copy اضافه کنید، مدت و صدا را بررسی کنید و از ابتدا تا انتها ببینید.

    mux.sh
    ffmpeg -i video/video.mp4 -i video/audio.wav \
      -c:v copy -c:a aac -b:a 192k -shortest \
      video/final.mp4
    
    ffprobe -v error -show_entries format=duration \
      -of default=nw=1:nk=1 video/final.mp4

    خروجی نمونه

    12.000000
  6. با همان مدل تکرار کنید

    فقط فریم اشتباه و تغییر دلخواه را توضیح دهید، HTML فعلی را به Opus بدهید و پیش از رندر کامل پیش‌نمایش را دوباره اجرا کنید.

چه چیزی دارد

  • استوری‌بورد و تایم‌لاین نوشته‌شده در ابتدا
  • صحنه HTML قطعی از Opus 5.5
  • اسکریپت رندر Playwright و کدگذاری ffmpeg
  • MP4 نهایی با مسیر صوتی اختیاری
  • حلقه بررسی و اصلاح فریم‌به‌فریم

چه کاری نمی‌کند

  • Opus 5.5 کد می‌دهد نه فریم ویدیو؛ رندرر مرورگر فریم‌ها را می‌گیرد
  • بدون اشتراک Claude اما استفاده مدل Felo بر اساس مصرف محاسبه می‌شود
  • Node، Playwright Chromium و ffmpeg هنوز لازم‌اند
  • بدون دارایی خارجی یا CDN؛ فقط HTML/CSS/SVG/Canvas یا فایل محلی
  • ویدیوی بلند نیاز به تقسیم صحنه دارد؛ این ضبط صفحه بی‌درنگ نیست
  • روایت و موسیقی گام‌های جداست؛ گردش‌کار فقط صدای داده‌شده را mux می‌کند

پرسش‌ها

آیا Opus 5.5 مستقیم ویدیو می‌سازد؟

نه. متن و کد می‌سازد و صحنه HTML را می‌نویسد؛ مرورگر و ffmpeg آن را به فریم و MP4 تبدیل می‌کنند.

اشتراک Claude لازم است؟

نه. با کلید Felo `claude-opus-5-5` را از Felo API صدا بزنید، بر اساس مصرف؛ اشتراک جداگانه Claude لازم نیست.

در کدام عامل‌ها کار می‌کند؟

WorkBuddy، ChatGPT با اجرای کد، Codex، Pi Agent، Claude Code یا هر عاملی که Node و مرورگر headless اجرا کند.

چرا seek(t)?

گرفتن فریم بی‌درنگ نیست: فریم 400 ممکن است خیلی بعد از 399 گرفته شود، پس هر فریم باید تابع خالص t باشد.

HyperFrames یا Remotion استفاده شود؟

بله برای ترکیب‌های بلند و پروژه‌های ساختاریافته. این دستور یک HTML نگه می‌دارد تا فراخوانی مدل و حلقه رندر قابل بررسی باشد.

هزینه ویدیوی ۱۲ ثانیه چقدر است؟

به پرامپت، توکن خروجی و تکرارها بستگی دارد. مدل Felo بر اساس توکن محاسبه می‌کند؛ پیش از رندر بلند قیمت را ببینید.

موسیقی و روایت خودم را استفاده کنم؟

بله اگر حق دارید. اول ویدیو را رندر کنید سپس مسیر دارای مجوز یا TTS خود را با ffmpeg mux کنید. گردش‌کار روایت نمی‌سازد.

مراجع

آموزش‌ها و پروژه‌هایی که این گردش‌کار بر آن‌ها استوار است.

گردش‌کارهای مرتبط

آن را از خود کنید

همان دستور، متناسب با روش واقعی تحویل شما.

پروژه HyperFrames یا Remotion

برای ترکیب‌های بلند از این چارچوب‌ها استفاده کنید؛ فراخوانی مدل همان است و فقط دستور رندر عوض می‌شود.

نسخه مربعی برای شبکه‌ها

beat sheet را نگه دارید، به 1080x1080 بروید و تایپوگرافی و نواحی امن را تنظیم کنید.

سه نسخه از یک خلاصه

سه صحنه با رنگ و ریتم متفاوت بسازید، پیش‌نمایش‌ها را ببینید و فقط بهترین را رندر کنید.

صفحات مرجع پشت این دستور و گام‌های بعدی.