İç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.
İ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.
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
Ö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.
Opus 5.5 ile HTML sahnesi oluşturun
Anthropic SDK’yı Felo base URL’sine yönlendirin,
claude-opus-5-5kullanın ve yalnızcawindow.DURATIONileasync 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
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
Tüm kareleri işleyin ve kodlayın
seek(t)it = frame / fpsile ç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
Sesi muxlayın ve tamamını izleyin
Lisanslı kanalı
-c:v copyile 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
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ı
Bir araştırma sayfasını sunuma dönüştürün
Sayfayı çıkarın, LiveDoc bağlamı olarak kaydedin, PPT Task API’nin desteyi kurmasına izin verin ve bitmiş bağlantı gelene kadar sorun.
İş akışını açİçerikBir ürün brifini açılış sayfasına dönüştürün
Kitleyi araştırın, brifi LiveDoc’a kaydedin, bu bağlamdan bir Landing Page görevi oluşturun ve barındırılan sayfa hazır olana kadar sorun.
İş akışını açİçerikBir ayı izleyicilerinizin sorularıyla doldurun
Chat ile temaları haritalayın, X’te izleyici sorularını bulun, bir video transkriptinden gerçek açı alın ve her satırın kanıtını söylediği dört haftalık bir takvim kurun.
İş akışını aç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.
Devam edin
Bu tarifin arkasındaki referans sayfaları ve sonraki adımlar.