Контент
Створіть motion graphics відео з HTML і Opus 5.5
Напишіть beat sheet, попросіть Opus 5.5 написати детерміновану HTML-сцену через Felo API, захопіть кадри Playwright і закодуйте MP4 через ffmpeg. Працює у WorkBuddy, ChatGPT із виконанням коду, Codex, Pi Agent або Claude Code.
Скопіювати промпт
Замініть поля в квадратних дужках і вставте в Claude Code, Codex або AI з доступом до термінала. Він встановить скіл Felo, запитає перед витратою кредитів і запустить процес.
Створи відео на [тривалість] секунд, формат [вертикальний / горизонтальний], про [ідея]. Стиль: [стиль]. Аудиторія: [аудиторія]. Аудіо: [немає / ліцензований трек у ./audio.mp3 / TTS]. Ти працюєш у теці з терміналом і [WorkBuddy / ChatGPT із запуском коду / Codex / Pi Agent / Claude Code]. Якщо не можеш запустити Node і headless-браузер, зупинися й скажи мені, не вдавай, що відрендерив. Дій у цьому порядку: 1. Напиши розкадровку з 3–6 бітів із точними секундами початку й кінця. 2. Крок HTML: виклич Claude Opus 5.5 через Felo API. Використай ID моделі 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, 25%, 50%, 75% і на останньому кадрі. Перевір переповнення, обрізання, шрифти й безпечні зони перед повним рендером. 5. Відрендери кожен кадр через Playwright, закодуй у H.264 через ffmpeg і змікшуй аудіодоріжку, якщо вона є. 6. Покажи перший кадр, останній і шлях до файлу. Не публікуй. Правила: - Перед витратою кредитів покажи виклики Felo API й оцінку токенів. - Використовуй лише текст, який я дав, або чітко познач вигаданий текст-заглушку. - Не використовуй захищені авторським правом матеріали, музику, логотипи чи шрифти. Лише системні шрифти й згенеровані форми. - Тримай фінальне відео коротше 30 секунд, якщо я явно не попросив довше. - Запиши все в ./video/ і підсумуй виконані команди.
Копія також містить кроки встановлення й правила безпеки.
Що ви отримаєте
Приклад результату одного запуску. Не живе генерування.
Звіт рендеру
Сцена: video/scene.html (18 КБ) Тривалість: 12 с · 1080x1920 · 30 fps · 360 кадрів Перевірки: 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, 360 кадрів) Аудіо: video/final.mp4 (AAC, 12,0 с)
Точні виклики
Для розробників: той самий процес як код, у порядку виконання.
Показати справжні виклики API
Напишіть спершу beat sheet
Задайте тривалість і 3–6 бітів, кожен із початком, кінцем, текстом на екрані й головною візуальною зміною.
Згенеруйте HTML-сцену з Opus 5.5
Спрямуйте Anthropic SDK на base URL Felo, використайте
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
Перевірте детермінізм і превʼю
Зробіть знімки при t=0, 25%, 50%, 75% і останньому кадрі, перевірте переповнення тексту, шрифти й безпечні зони.
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
Відрендерте всі кадри й закодуйте
Викличте
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
Змікшуйте аудіо й подивіться повністю
Додайте ліцензійну доріжку через
-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
Ітеруйте тією самою моделлю
Опишіть лише помилковий кадр і бажану зміну, передайте поточний HTML Opus і запустіть превʼю перед повним рендером.
Що входить
- Спочатку написаний storyboard і таймлайн
- Детермінована HTML-сцена від Opus 5.5
- Скрипт рендеру Playwright і кодування ffmpeg
- Фінальний MP4 з опційною аудіодоріжкою
- Цикл перегляду й правок кадр за кадром
Чого не робить
- Opus 5.5 дає код, не кадри; рендерер браузера захоплює кадри
- Без підписки Claude, але використання моделі Felo оплачується за використання
- Node, Playwright Chromium і ffmpeg усе ще потрібні
- Без зовнішніх ассетів і CDN; лише HTML/CSS/SVG/Canvas або локальні файли
- Довгі відео потребують поділу сцен; це не запис екрана в реальному часі
- Нарація й музика — окремі кроки; процес лише мікшує надане аудіо
Запитання
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, щоб виклик моделі й цикл рендеру були перевірювані.
Скільки коштує 12-секундне відео?
Залежить від промпту, вихідних токенів та ітерацій. Модель Felo тарифікує за токен; перевірте ціни перед довгим рендером.
Чи можна використати власну музику й нарацію?
Так, якщо маєте права. Спершу відрендерте відео, потім змікшуйте ліцензійну доріжку або свій TTS через ffmpeg. Процес не генерує нарацію.
Довідка
Посібники й проєкти, на яких ґрунтується цей процес.
Пов’язані процеси
Перетворіть дослідницьку сторінку на презентацію
Вилучіть сторінку, збережіть як контекст LiveDoc, дозвольте PPT Task API збудувати дек і питайте, доки не буде готового посилання.
Відкрити робочий процесКонтентПеретворіть продуктовий бриф на лендінг
Дослідіть аудиторію, збережіть бриф у LiveDoc, створіть із цього контексту завдання Landing Page і питайте, доки розміщена сторінка не буде готова.
Відкрити робочий процесКонтентНаповніть місяць контенту питаннями аудиторії
Змапуйте теми з Chat, знайдіть питання аудиторії на X, візьміть справжній кут із транскрипту відео й складіть чотиритижневий календар, де кожен рядок називає свій доказ.
Відкрити робочий процесАдаптуйте
Той самий рецепт, підлаштований під те, як ви насправді працюєте.
Проєкт HyperFrames або Remotion
Для довгих композицій використайте ці фреймворки; виклик моделі той самий, змінюється лише команда рендеру.
Квадратна версія для соцмереж
Збережіть beat sheet, перейдіть на 1080x1080 і налаштуйте типографіку та безпечні зони.
Три варіанти з одного брифу
Згенеруйте три сцени з різними кольорами й ритмами, перегляньте превʼю й рендерте лише найкращу.
Далі
Довідкові сторінки за цим рецептом і наступні кроки.