Felo API PlatformFelo API Platform

सामग्री

HTML और Opus 5.5 से motion graphics वीडियो बनाएँ

बीट शीट लिखें, Opus 5.5 से Felo API के ज़रिए नियतात्मक HTML दृश्य लिखवाएँ, Playwright से फ़्रेम कैप्चर करें और ffmpeg से MP4 एन्कोड करें। WorkBuddy, कोड-निष्पादन वाले ChatGPT, Codex, Pi Agent या Claude Code में चलता है।

समय45 मिनटस्तरमध्यमअपडेट2026-10-30
किसके लिएक्रिएटरMotion designerस्वतंत्र डेवलपर

प्रॉम्प्ट कॉपी करें

वर्ग कोष्ठक के फ़ील्ड बदलें और 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 कॉल दिखाएँ
  1. पहले बीट शीट लिखें

    अवधि और 3–6 बीट तय करें, हर बीट में शुरू, अंत, स्क्रीन टेक्स्ट और मुख्य दृश्य बदलाव।

  2. 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
  3. नियतता जाँचें और पूर्वावलोकन

    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
  4. सभी फ़्रेम रेंडर और एन्कोड

    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
  5. ऑडियो मक्स करें और पूरा देखें

    लाइसेंस वाला ट्रैक -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
  6. उसी मॉडल से पुनरावृत्ति

    केवल गलत फ़्रेम और चाहा बदलाव बताएँ, मौजूदा 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 से मक्स करें। वर्कफ़्लो नैरेशन नहीं बनाता।

संदर्भ

इस वर्कफ़्लो के आधार वाले ट्यूटोरियल और प्रोजेक्ट।

संबंधित वर्कफ़्लो

इसे अपना बनाएँ

वही रेसिपी, आपके असली तरीके के हिसाब से।

HyperFrames या Remotion प्रोजेक्ट

लंबी रचना के लिए ये फ़्रेमवर्क इस्तेमाल करें; मॉडल कॉल वही, केवल रेंडर कमांड बदलता है।

सोशल के लिए वर्गाकार संस्करण

बीट शीट रखें, 1080x1080 पर जाएँ और टाइपोग्राफ़ी तथा सुरक्षित क्षेत्र समायोजित करें।

एक ब्रीफ़ से तीन संस्करण

अलग रंग और लय वाले तीन दृश्य बनाएँ, पूर्वावलोकन देखें और केवल सबसे अच्छा रेंडर करें।

इस रेसिपी के पीछे के संदर्भ पेज और अगले कदम।