কনটেন্ট
HTML ও Opus 5.5 দিয়ে motion graphics ভিডিও বানান
বিট শিট লিখুন, Felo API দিয়ে Opus 5.5-কে নির্ধারক 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. সঠিক শুরুর ও শেষের সেকেন্ডসহ ৩–৬ বিটের স্টোরিবোর্ড লিখুন। 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 কল ও আনুমানিক টোকেন দেখান। - শুধু আমি দেওয়া টেক্সট ব্যবহার করুন, বা বানানো প্লেসহোল্ডার টেক্সট স্পষ্টভাবে চিহ্নিত করুন। - কপিরাইটযুক্ত উপাদান, সংগীত, লোগো বা ফন্ট ব্যবহার করবেন না। শুধু সিস্টেম ফন্ট ও তৈরি আকৃতি। - আমি স্পষ্টভাবে দীর্ঘ সংস্করণ না চাইলে চূড়ান্ত ভিডিও ৩০ সেকেন্ডের নিচে রাখুন। - সবকিছু ./video/-এ লিখুন এবং চালানো কমান্ডের সারসংক্ষেপ দিন।
কপিতে ইনস্টল ধাপ ও নিরাপত্তা নিয়মও আছে।
আপনি কী পান
একটি রানের উদাহরণ আউটপুট। লাইভ জেনারেশন নয়।
রেন্ডার রিপোর্ট
দৃশ্য: video/scene.html (১৮ KB) দৈর্ঘ্য: ১২ সেকেন্ড · 1080x1920 · 30fps · ৩৬০ ফ্রেম যাচাই: 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, ৩৬০ ফ্রেম) অডিও: video/final.mp4 (AAC, ১২.০ সেকেন্ড)
সঠিক কল
ডেভেলপারদের জন্য: একই ওয়ার্কফ্লো কোড হিসেবে, চালানোর ক্রমে।
আসল API কল দেখান
আগে বিট শিট লিখুন
সময়কাল ও ৩–৬ বিট ঠিক করুন, প্রতিটিতে শুরু, শেষ, স্ক্রিন টেক্সট ও প্রধান দৃশ্য পরিবর্তন।
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, ২৫%, ৫০%, ৭৫% ও শেষ ফ্রেমে স্ক্রিনশট নিন, টেক্সট ওভারফ্লো, ফন্ট ও নিরাপদ এলাকা যাচাই করুন।
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 রাখে যাতে মডেল কল ও রেন্ডার লুপ যাচাই করা যায়।
১২ সেকেন্ড ভিডিওর খরচ কত?
প্রম্পট, আউটপুট টোকেন ও পুনরাবৃত্তির ওপর নির্ভর। Felo মডেল প্রতি টোকেন বিল করে; লম্বা রেন্ডারের আগে দাম দেখুন।
নিজের সংগীত ও ন্যারেশন ব্যবহার করা যায়?
হ্যাঁ, অধিকার থাকলে। আগে ভিডিও রেন্ডার করুন, তারপর লাইসেন্সড ট্র্যাক বা TTS ffmpeg দিয়ে মাক্স করুন। ওয়ার্কফ্লো ন্যারেশন বানায় না।
রেফারেন্স
এই ওয়ার্কফ্লোর ভিত্তি টিউটোরিয়াল ও প্রকল্প।
সম্পর্কিত ওয়ার্কফ্লো
গবেষণা পৃষ্ঠাকে উপস্থাপনায় বদলান
পৃষ্ঠা নিষ্কাশ করুন, LiveDoc প্রসঙ্গ হিসেবে রাখুন, PPT Task API দিয়ে ডেক বানাতে দিন এবং প্রস্তুত লিংক না পাওয়া পর্যন্ত জিজ্ঞাসা করুন।
ওয়ার্কফ্লো খুলুনকনটেন্টপণ্য ব্রিফকে ল্যান্ডিং পেজে বদলান
দর্শক গবেষণা করুন, ব্রিফ LiveDoc-এ রাখুন, সেই প্রসঙ্গ থেকে Landing Page কাজ তৈরি করুন এবং হোস্টেড পৃষ্ঠা প্রস্তুত হওয়া পর্যন্ত জিজ্ঞাসা করুন।
ওয়ার্কফ্লো খুলুনকনটেন্টআপনার দর্শকদের প্রশ্ন দিয়ে এক মাসের কনটেন্ট ভরান
Chat দিয়ে বিষয়ের মানচিত্র বানান, X-এ দর্শকদের প্রশ্ন খুঁজুন, ভিডিও ট্রান্সক্রিপ্ট থেকে আসল কোণ নিন এবং চার সপ্তাহের ক্যালেন্ডার বানান যেখানে প্রতিটি সারি তার প্রমাণ বলে।
ওয়ার্কফ্লো খুলুননিজের মতো করুন
একই রেসিপি, আপনি যেভাবে সত্যিই সরবরাহ করেন সেভাবে।
HyperFrames বা Remotion প্রকল্প
লম্বা কম্পোজিশনে এই ফ্রেমওয়ার্ক ব্যবহার করুন; মডেল কল একই, শুধু রেন্ডার কমান্ড বদলায়।
সোশ্যালের জন্য বর্গাকার সংস্করণ
বিট শিট রাখুন, 1080x1080-এ যান এবং টাইপোগ্রাফি ও নিরাপদ এলাকা সমন্বয় করুন।
এক ব্রিফ থেকে তিন সংস্করণ
ভিন্ন রঙ ও লয়ের তিন দৃশ্য বানান, প্রিভিউ দেখুন এবং শুধু সেরাটি রেন্ডার করুন।
এগিয়ে যান
এই রেসিপির পেছনের রেফারেন্স পৃষ্ঠা ও পরবর্তী ধাপ।