Felo API PlatformFelo API Platform

İçerik

HTML ve Opus 5.5 ile motion graphics videosu oluşturun

Bir beat sheet yazın, Opus 5.5’e Felo API üzerinden deterministik bir HTML sahnesi yazdırın, kareleri Playwright ile yakalayın ve ffmpeg ile MP4 kodlayın. WorkBuddy, kod yürütmeli ChatGPT, Codex, Pi Agent veya Claude Code’da çalışır.

Süre45 dakikaSeviyeOrtaGüncellendi2026-10-30
Kimler içinİçerik üreticileriMotion tasarımcılarıBağımsız geliştiriciler

İstemi kopyalayın

Köşeli parantezli alanları değiştirip Claude Code, Codex veya terminal erişimi olan bir AI’ya yapıştırın. Felo becerisini kurar, kredi harcamadan önce sorar ve iş akışını çalıştırır.

[Fikir] hakkında [süre] saniyelik [dikey / yatay] video oluştur.
Stil: [stil]. Hedef kitle: [hedef kitle]. Ses: [yok / ./audio.mp3 içinde lisanslı parça / TTS].

Terminali olan bir klasörde [WorkBuddy / kod çalıştıran ChatGPT / Codex / Pi Agent / Claude Code] ile çalışıyorsun. Node ve headless tarayıcı çalıştıramıyorsan dur ve bana söyle, render etmiş gibi yapma.

Şu sırayla ilerle:
1. Kesin başlangıç ve bitiş saniyeleri olan 3–6 vuruşluk storyboard yaz.
2. HTML adımı: Felo API üzerinden Claude Opus 5.5’i çağır. claude-opus-5-5 model ID’sini ve FELO_API_KEY’imi kullan. Benden Claude aboneliği veya başka bir Anthropic anahtarı isteme.
3. Opus’tan tek, kendi kendine yeten bir HTML dosyası iste: window.DURATION ayarlansın ve async window.seek(t) açılsın. Harici varlık, CDN, Date.now(), requestAnimationFrame(), CSS geçişi veya zamanlayıcı yok. Tüm rastgele değerleri seed’le ki aynı t her zaman aynı kareyi çizsin.
4. t = 0, %25, %50, %75 ve son karede önizle. Tümünü render etmeden önce taşma, kırpma, yazı tipi ve güvenli alanları kontrol et.
5. Her kareyi Playwright ile render et, ffmpeg ile H.264’e kodla ve ses parçası varsa muxla.
6. İlk kareyi, son kareyi ve son dosya yolunu göster. Yayımlama.

Kurallar:
- Kredi harcamadan önce Felo API çağrılarını ve tahmini token’ı göster.
- Yalnızca verdiğim metni kullan veya uydurma yer tutucu metni açıkça işaretle.
- Telif hakkı olan materyal, müzik, logo veya yazı tipi kullanma. Yalnızca sistem yazı tipleri ve üretilen şekiller.
- Açıkça uzun sürüm istemedikçe son videoyu 30 saniyenin altında tut.
- Her şeyi ./video/ içine yaz ve çalıştırılan komutları özetle.

Kopya kurulum adımlarını ve güvenlik kurallarını da içerir.

Ne elde edersiniz

Bir çalıştırmanın örnek çıktısı. Canlı üretim değil.

Örnek render raporu (alıntı)

Render raporu

Sahne: video/scene.html (18 KB) Süre: 12 sn · 1080x1920 · 30fps · 360 kare Kontroller: window.DURATION = 12 · seek(t) var · Date.now / rAF / zamanlayıcı yok

Önizleme: preview-0ms.png · preview-3000ms.png · preview-6000ms.png · preview-9000ms.png Kodlama: video/video.mp4 (H.264, 360 kare) Ses: video/final.mp4 (AAC, 12,0 sn)

Tam çağrılar

Geliştiriciler için: aynı iş akışı kod olarak, yürütme sırasıyla.

Gerçek API çağrılarını göster
  1. Önce beat sheet yazın

    Süreyi ve 3–6 bölümü belirleyin, her biri başlangıç, bitiş, ekran metni ve ana görsel değişiklikle.

  2. Opus 5.5 ile HTML sahnesi oluşturun

    Anthropic SDK’yı Felo base URL’sine yönlendirin, claude-opus-5-5 kullanın ve yalnızca window.DURATION ile async seek(t) içeren HTML isteyin.

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

    Örnek çıktı

    scene.html: 18432 bytes
  3. Determinizmi ve önizlemeyi kontrol edin

    t=0, %25, %50, %75 ve son karede ekran görüntüsü alın; metin taşması, fontlar ve güvenli alanları kontrol edin.

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

    Örnek çıktı

    duration 12s
    video/preview-0ms.png
    video/preview-3000ms.png
    video/preview-6000ms.png
    video/preview-9000ms.png
  4. Tüm kareleri işleyin ve kodlayın

    seek(t)i t = frame / fps ile çağırın, kareleri yakalayın ve ffmpeg ile H.264 kodlayın.

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

    Örnek çıktı

    360 frames -> video/video.mp4
  5. Sesi muxlayın ve tamamını izleyin

    Lisanslı kanalı -c:v copy ile ekleyin, süre ve ses düzeyini kontrol edin, baştan sona izleyin.

    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

    Örnek çıktı

    12.000000
  6. Aynı modelle iterasyon yapın

    Yalnızca hatalı kareyi ve istenen değişikliği anlatın, mevcut HTML’i Opus’a verin ve tam işlemeden önce önizlemeyi yeniden çalıştırın.

Neler dahil

  • Önce yazılmış storyboard ve zaman çizelgesi
  • Opus 5.5’ten deterministik HTML sahnesi
  • Playwright kare işleme betiği ve ffmpeg kodlaması
  • İsteğe bağlı ses kanalıyla final MP4
  • Kare kare inceleme ve düzeltme döngüsü

Neleri yapmaz

  • Opus 5.5 kod verir, video karesi değil; tarayıcı işleyicisi kareleri yakalar
  • Claude aboneliği gerekmez ama Felo model kullanımı kullanıma göre faturalanır
  • Node, Playwright Chromium ve ffmpeg hâlâ gerekli
  • Harici varlık veya CDN yok; yalnızca HTML/CSS/SVG/Canvas veya yerel dosyalar
  • Uzun videolar sahne bölmeyi gerektirir; bu gerçek zamanlı ekran kaydı değil
  • Anlatım ve müzik ayrı adımlar; iş akışı yalnızca verilen sesi muxlar

Sorular

Opus 5.5 doğrudan video üretir mi?

Hayır. Metin ve kod üretip HTML sahnesini yazar; tarayıcı ve ffmpeg onu karelere ve MP4’e çevirir.

Claude aboneliği gerekli mi?

Hayır. `claude-opus-5-5`i Felo API üzerinden çağırmak için Felo anahtarını kullanın, kullanıma göre faturalanır; ayrı Claude aboneliği gerekmez.

Hangi ajanlarda çalışır?

WorkBuddy, kod yürütmeli ChatGPT, Codex, Pi Agent, Claude Code veya Node ve headless tarayıcı çalıştırabilen her ajan.

Neden seek(t)?

Kare yakalama gerçek zamanlı değildir: 400. kare 399’dan çok sonra yakalanabilir, bu yüzden her kare t’nin saf fonksiyonu olmalı.

HyperFrames veya Remotion kullanılabilir mi?

Evet, uzun kompozisyonlar ve yapılandırılmış projeler için. Bu tarif tek HTML tutar, böylece model çağrısı ve işleme döngüsü denetlenebilir.

12 saniyelik video ne kadar?

İsteme, çıktı tokenlarına ve iterasyonlara bağlı. Felo modeli token başına faturalar; uzun işlemeden önce fiyatları kontrol edin.

Kendi müziğim ve anlatımım kullanılabilir mi?

Haklarınız varsa evet. Önce videoyu işleyin, sonra lisanslı kanalı veya TTS’nizi ffmpeg ile muxlayın. İş akışı anlatım üretmez.

Referanslar

Bu iş akışının dayandığı öğreticiler ve projeler.

İlgili iş akışları

Kendinize uyarlayın

Aynı tarif, gerçekte nasıl teslim ettiğinize uyarlanmış.

HyperFrames veya Remotion projesi

Uzun kompozisyonlar için bu çerçeveleri kullanın; model çağrısı aynı, yalnızca işleme komutu değişir.

Sosyal için kare sürüm

Beat sheet’i koruyun, 1080x1080’e geçin ve tipografi ile güvenli alanları ayarlayın.

Tek briften üç varyant

Farklı renk ve ritimlerle üç sahne üretin, önizlemeleri inceleyin ve yalnızca en iyisini işleyin.

Bu tarifin arkasındaki referans sayfaları ve sonraki adımlar.