सामग्री
HTML और Opus 5.5 से motion graphics वीडियो बनाएँ
बीट शीट लिखें, Opus 5.5 से Felo API के ज़रिए नियतात्मक HTML दृश्य लिखवाएँ, Playwright से फ़्रेम कैप्चर करें और ffmpeg से MP4 एन्कोड करें। WorkBuddy, कोड-निष्पादन वाले ChatGPT, Codex, Pi Agent या Claude Code में चलता है।
प्रॉम्प्ट कॉपी करें
वर्ग कोष्ठक के फ़ील्ड बदलें और Claude Code, Codex या टर्मिनल एक्सेस वाले AI में चिपकाएँ। यह Felo स्किल इंस्टॉल करता है, क्रेडिट से पहले पूछता है और वर्कफ़्लो चलाता है।
[विचार] पर [अवधि] सेकंड का [वर्टिकल / हॉरिज़ॉन्टल] वीडियो बनाएं। शैली: [शैली]। पाठक: [पाठक]। ऑडियो: [कोई नहीं / ./audio.mp3 में लाइसेंस प्राप्त ट्रैक / TTS]। आप टर्मिनल वाले फ़ोल्डर में [WorkBuddy / कोड चलाने वाला ChatGPT / Codex / Pi Agent / Claude Code] के साथ काम कर रहे हैं। अगर Node और हेडलेस ब्राउज़र नहीं चला सकते, तो रुकें और मुझे बताएं, रेंडर होने का नाटक न करें। इस क्रम में चलें: 1. सटीक शुरुआत और अंत सेकंड वाला 3–6 बीट का स्टोरीबोर्ड लिखें। 2. HTML चरण: Felo API से Claude Opus 5.5 कॉल करें। मॉडल ID claude-opus-5-5 और मेरी FELO_API_KEY इस्तेमाल करें। मुझसे Claude सदस्यता या दूसरी Anthropic कुंजी न मांगें। 3. Opus से एक स्व-निहित HTML फ़ाइल मांगें: window.DURATION सेट करे और async window.seek(t) दिखाए। बाहरी संपत्ति, CDN, Date.now(), requestAnimationFrame(), CSS ट्रांज़िशन या टाइमर नहीं। हर यादृच्छिक मान को सीड करें ताकि वही t हमेशा वही फ़्रेम बनाए। 4. t = 0, 25%, 50%, 75% और अंतिम फ़्रेम पर पूर्वावलोकन करें। पूरा रेंडर से पहले ओवरफ़्लो, कटाई, फ़ॉन्ट और सुरक्षित क्षेत्र जाँचें। 5. Playwright से हर फ़्रेम रेंडर करें, ffmpeg से H.264 एन्कोड करें और ऑडियो ट्रैक हो तो मिक्स करें। 6. पहला फ़्रेम, अंतिम फ़्रेम और अंतिम फ़ाइल पथ दिखाएं। प्रकाशित न करें। नियम: - क्रेडिट खर्च करने से पहले Felo API कॉल और अनुमानित टोकन दिखाएं। - केवल मेरा दिया टेक्स्ट इस्तेमाल करें, या गढ़े गए प्लेसहोल्डर टेक्स्ट को स्पष्ट रूप से चिह्नित करें। - कॉपीराइट वाली सामग्री, संगीत, लोगो या फ़ॉन्ट इस्तेमाल न करें। केवल सिस्टम फ़ॉन्ट और बनाए गए आकार। - जब तक मैं लंबा संस्करण न मांगूँ, अंतिम वीडियो 30 सेकंड से कम रखें। - सब कुछ ./video/ में लिखें और चलाए गए कमांड का सारांश दें।
कॉपी में इंस्टॉल चरण और सुरक्षा नियम भी हैं।
आपको क्या मिलता है
एक रन का उदाहरण आउटपुट। लाइव जनरेशन नहीं।
रेंडर रिपोर्ट
सीन: video/scene.html (18 KB) अवधि: 12 सेकंड · 1080x1920 · 30fps · 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 कॉल दिखाएँ
पहले बीट शीट लिखें
अवधि और 3–6 बीट तय करें, हर बीट में शुरू, अंत, स्क्रीन टेक्स्ट और मुख्य दृश्य बदलाव।
Opus 5.5 से HTML दृश्य बनाएँ
Anthropic SDK को Felo base URL पर लगाएँ,
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से बुलाएँ, फ़्रेम कैप्चर करें और ffmpeg से H.264 एन्कोड करें।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 को दें और पूरा रेंडर से पहले पूर्वावलोकन दोबारा चलाएँ।
इसमें क्या है
- पहले लिखी स्टोरीबोर्ड और टाइमलाइन
- Opus 5.5 का नियतात्मक HTML दृश्य
- 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 प्रोजेक्ट
लंबी रचना के लिए ये फ़्रेमवर्क इस्तेमाल करें; मॉडल कॉल वही, केवल रेंडर कमांड बदलता है।
सोशल के लिए वर्गाकार संस्करण
बीट शीट रखें, 1080x1080 पर जाएँ और टाइपोग्राफ़ी तथा सुरक्षित क्षेत्र समायोजित करें।
एक ब्रीफ़ से तीन संस्करण
अलग रंग और लय वाले तीन दृश्य बनाएँ, पूर्वावलोकन देखें और केवल सबसे अच्छा रेंडर करें।
आगे बढ़ें
इस रेसिपी के पीछे के संदर्भ पेज और अगले कदम।