Obsah
Vytvořte motion graphics video s HTML a Opus 5.5
Napište beat sheet, požádejte Opus 5.5 o deterministickou HTML scénu přes Felo API, zachyťte snímky Playwrightem a zakódujte MP4 ffmpegem. Běží ve WorkBuddy, ChatGPT s prováděním kódu, Codex, Pi Agent nebo Claude Code.
Zkopírovat prompt
Nahraďte pole v hranatých závorkách a vložte do Claude Code, Codex nebo AI s přístupem k terminálu. Nainstaluje skill Felo, zeptá se před utracením kreditů a spustí workflow.
Vytvoř video o délce [délka] sekund, formát [vertikální / horizontální], na téma [nápad]. Styl: [styl]. Publikum: [publikum]. Audio: [žádné / licencovaná stopa v ./audio.mp3 / TTS]. Pracuješ ve složce s terminálem a [WorkBuddy / ChatGPT s prováděním kódu / Codex / Pi Agent / Claude Code]. Pokud nemůžeš spustit Node a headless prohlížeč, zastav se a řekni mi to, nepředstírej, že jsi vyrenderoval. Postupuj v tomto pořadí: 1. Napiš storyboard o 3–6 beatech s přesnými sekundami začátku a konce. 2. Krok HTML: zavolej Claude Opus 5.5 přes Felo API. Použij ID modelu claude-opus-5-5 a můj FELO_API_KEY. Nežádej mě o předplatné Claude ani jiný klíč Anthropic. 3. Požádej Opus o jeden samostatný HTML soubor: nastav window.DURATION a vystav async window.seek(t). Žádné externí assety, CDN, Date.now(), requestAnimationFrame(), CSS přechody ani timery. Zaseeduj všechny náhodné hodnoty, aby stejné t vždy vykreslilo stejný snímek. 4. Prohlédni si t = 0, 25%, 50%, 75% a poslední snímek. Zkontroluj přetečení, ořezy, fonty a bezpečné zóny před renderem všeho. 5. Vyrenderuj každý snímek přes Playwright, zakóduj do H.264 přes ffmpeg a smíchej audio stopu, pokud existuje. 6. Ukaž první snímek, poslední a cestu k souboru. Nepublikuj. Pravidla: - Před utracením kreditů ukaž volání Felo API a odhad tokenů. - Používej jen text, který ti dám, nebo jasně označ vymyšlený zástupný text. - Nepoužívej autorská práva chráněné materiály, hudbu, loga ani fonty. Jen systémové fonty a generované tvary. - Drž finální video pod 30 sekund, pokud výslovně nepožádám delší. - Vše zapiš do ./video/ a shrň spuštěné příkazy.
Kopie obsahuje i instalační kroky a bezpečnostní pravidla.
Co dostanete
Ukázkový výstup jednoho běhu. Ne živé generování.
Render report
Scéna: video/scene.html (18 KB) Délka: 12 s · 1080x1920 · 30 fps · 360 snímků Kontroly: window.DURATION = 12 · seek(t) přítomno · bez Date.now / rAF / timerů
Náhled: preview-0ms.png · preview-3000ms.png · preview-6000ms.png · preview-9000ms.png Kódování: video/video.mp4 (H.264, 360 snímků) Audio: video/final.mp4 (AAC, 12,0 s)
Přesná volání
Pro vývojáře: stejný workflow jako kód, v pořadí provádění.
Zobrazit skutečná API volání
Napište nejdřív beat sheet
Určete délku a 3–6 beatů, každý se začátkem, koncem, textem na obrazovce a hlavní vizuální změnou.
Vygenerujte HTML scénu s Opus 5.5
Namiřte Anthropic SDK na base URL Felo, použijte
claude-opus-5-5a žádejte jen HTML swindow.DURATIONaasync 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`);Ukázkový výstup
scene.html: 18432 bytes
Zkontrolujte determinismus a náhled
Pořiďte snímky v t=0, 25 %, 50 %, 75 % a posledním snímku, zkontrolujte přetečení textu, fonty a bezpečné zóny.
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`);Ukázkový výstup
duration 12s video/preview-0ms.png video/preview-3000ms.png video/preview-6000ms.png video/preview-9000ms.png
Vyrenderujte všechny snímky a zakódujte
Volejte
seek(t)st = frame / fps, zachyťte snímky a zakódujte H.264 ffmpegem.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`);Ukázkový výstup
360 frames -> video/video.mp4
Muxněte audio a podívejte se celé
Přidejte licencovanou stopu přes
-c:v copy, zkontrolujte délku a hlasitost a podívejte se od začátku do konce.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.mp4Ukázkový výstup
12.000000
Iterujte se stejným modelem
Popište jen chybný snímek a požadovanou změnu, předejte aktuální HTML Opusovi a před plným renderem spusťte náhled.
Co obsahuje
- Nejdřív napsaný storyboard a timeline
- Deterministická HTML scéna od Opus 5.5
- Skript renderu Playwright a kódování ffmpeg
- Finální MP4 s volitelnou audio stopou
- Smyčka revize a oprav snímek po snímku
Co nedělá
- Opus 5.5 dává kód, ne snímky; renderer prohlížeče snímky zachytává
- Bez předplatného Claude, ale užití modelu Felo se účtuje podle užití
- Node, Playwright Chromium a ffmpeg jsou stále potřeba
- Bez externích assetů a CDN; jen HTML/CSS/SVG/Canvas nebo lokální soubory
- Dlouhá videa chtějí dělení scén; není to záznam obrazovky v reálném čase
- Narace a hudba jsou samostatné kroky; workflow jen muxuje dodané audio
Otázky
Vytváří Opus 5.5 video přímo?
Ne. Vytváří text a kód psaním HTML scény; prohlížeč a ffmpeg z ní udělají snímky a MP4.
Je potřeba předplatné Claude?
Ne. Použijte klíč Felo pro volání `claude-opus-5-5` přes Felo API, účtované podle užití; samostatné předplatné Claude není potřeba.
Ve kterých agentech běží?
WorkBuddy, ChatGPT s prováděním kódu, Codex, Pi Agent, Claude Code nebo agent, který umí Node a headless prohlížeč.
Proč seek(t)?
Zachytávání snímků není v reálném čase: snímek 400 může vzniknout mnohem později než 399, takže každý snímek musí být čistou funkcí t.
Lze použít HyperFrames nebo Remotion?
Ano, pro dlouhé kompozice a strukturované projekty. Tento recept drží jeden HTML, aby volání modelu a renderovací smyčka byly ověřitelné.
Kolik stojí 12sekundové video?
Záleží na promptu, výstupních tokenech a iteracích. Model Felo účtuje za token; před dlouhým renderem zkontrolujte ceny.
Lze použít vlastní hudbu a naraci?
Ano, pokud máte práva. Nejdřív vyrenderujte video, pak muxněte licencovanou stopu nebo své TTS ffmpegem. Workflow naraci negeneruje.
Reference
Návody a projekty, na kterých tento workflow stojí.
Související workflowy
Proměňte výzkumnou stránku v prezentaci
Extrahujte stránku, uložte jako kontext LiveDoc, nechte PPT Task API postavit deck a ptejte se, dokud není hotový odkaz.
Otevřít workflowObsahProměňte produktový brief v landing page
Prozkoumejte publikum, uložte brief do LiveDoc, vytvořte z toho kontextu úkol Landing Page a ptejte se, dokud hostovaná stránka není hotová.
Otevřít workflowObsahNaplňte měsíc obsahu otázkami publika
Zmapujte témata s Chat, najděte otázky publika na X, vezměte skutečný úhel z transkriptu videa a sestavte čtyřtýdenní kalendář, kde každý řádek uvádí svůj důkaz.
Otevřít workflowPřizpůsobte
Stejný recept, upravený podle toho, jak skutečně dodáváte.
Projekt HyperFrames nebo Remotion
Pro dlouhé kompozice použijte tyto frameworky; volání modelu je stejné, mění se jen příkaz renderu.
Čtvercová verze pro social
Zachovejte beat sheet, přejděte na 1080x1080 a upravte typografii a bezpečné zóny.
Tři varianty z jednoho briefu
Vygenerujte tři scény v jiných barvách a rytmech, prohlédněte náhledy a renderujte jen nejlepší.
Pokračujte
Referenční stránky za tímto receptem a další kroky.