Felo API PlatformFelo API Platform

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.

Čas45 minutÚroveňStředníAktualizováno2026-10-30
Pro kohoTvůrciMotion designéřiNezávislí vývojáři

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í.

Ukázkový render report (výňatek)

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í
  1. 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.

  2. Vygenerujte HTML scénu s Opus 5.5

    Namiřte Anthropic SDK na base URL Felo, použijte claude-opus-5-5 a žádejte jen HTML s window.DURATION a 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`);

    Ukázkový výstup

    scene.html: 18432 bytes
  3. 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
  4. Vyrenderujte všechny snímky a zakódujte

    Volejte seek(t) s t = 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
  5. 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.mp4

    Ukázkový výstup

    12.000000
  6. 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

Př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ší.

Referenční stránky za tímto receptem a další kroky.