Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Transform text scripts or ideas into fully produced, platform-optimized 9:16 short-form videos with voiceover, captions, music, and export-ready MP4 files.
Transform text scripts or ideas into fully produced, platform-optimized 9:16 short-form videos with voiceover, captions, music, and export-ready MP4 files.
This item's current download entry is known to bounce back to a listing or homepage instead of returning a package file.
Use the source page and any available docs to guide the install because the item currently does not return a direct package file.
I tried to install a skill package from Yavira, but the item currently does not return a direct package file. Inspect the source page and any extracted docs, then tell me what you can confirm and any manual steps still required.
I tried to upgrade a skill package from Yavira, but the item currently does not return a direct package file. Compare the source page and any extracted docs with my current installation, then summarize what changed and what manual follow-up I still need.
This skill enables Claude to transform a text script or idea into a fully produced short-form video โ ready to publish as an Instagram Reel, YouTube Short, or TikTok โ using the InVideo AI platform and its API. No video editing experience required. Just provide a script or topic, and Claude handles the rest. ๐ Sign up for InVideo here: https://invideo.sjv.io/TBB
Convert a raw script into a complete short-form video with visuals and voiceover Generate videos optimized for Instagram Reels, YouTube Shorts, and TikTok Automatically match stock footage, music, and transitions to the script content Add subtitles, captions, and text overlays for better engagement Produce videos in the correct 9:16 vertical format for all short-form platforms Export in MP4 ready to upload directly to any platform
Go to https://invideo.sjv.io/TBB and create an account Choose a plan that includes API access (Business plan or above) Navigate to Settings โ API or Developer Settings Copy your API Key: iv_api_xxxxxxxxxxxxxxxx Store it safely: export INVIDEO_API_KEY=iv_api_xxxxxxxxxxxxxxxx InVideo offers a free trial โ sign up at https://invideo.sjv.io/TBB to explore the platform before committing to a paid plan.
npm install axios form-data fs-extra
Base URL: https://api.invideo.io/v1 All requests require: Authorization: Bearer YOUR_INVIDEO_API_KEY Content-Type: application/json
POST https://api.invideo.io/v1/videos/generate
GET https://api.invideo.io/v1/videos/{videoId}/status
GET https://api.invideo.io/v1/videos/{videoId}/export
import axios from 'axios'; const client = axios.create({ baseURL: 'https://api.invideo.io/v1', headers: { 'Authorization': `Bearer ${process.env.INVIDEO_API_KEY}`, 'Content-Type': 'application/json' } }); const script = ` Did you know that 90% of startups fail in their first year? Here are 3 things the successful 10% do differently. Number 1: They talk to customers before building anything. Number 2: They launch ugly and iterate fast. Number 3: They obsess over retention, not acquisition. Follow for more startup insights every day. `; const response = await client.post('/videos/generate', { script: script, format: "9:16", // vertical for Reels / TikTok / Shorts duration: "short", // 15โ60 seconds style: "dynamic", // energetic cuts and transitions voiceover: { enabled: true, voice: "en-US-male-1", // choose from available voices speed: 1.1 // slightly faster for short-form }, captions: { enabled: true, style: "bold-bottom", // TikTok-style captions highlight: true // highlight word as it's spoken }, music: { enabled: true, mood: "upbeat", volume: 0.3 // background music volume (0โ1) }, branding: { watermark: false } }); const videoId = response.data.videoId; console.log("Video generation started. ID:", videoId);
async function waitForVideo(videoId, maxWaitMs = 120000) { const start = Date.now(); while (Date.now() - start < maxWaitMs) { await new Promise(r => setTimeout(r, 5000)); // poll every 5s const status = await client.get(`/videos/${videoId}/status`); const { state, progress, exportUrl } = status.data; console.log(`Status: ${state} โ ${progress}% complete`); if (state === "completed") { console.log("Video ready:", exportUrl); return exportUrl; } if (state === "failed") { throw new Error("Video generation failed โ check your script and settings"); } } throw new Error("Timeout โ video took too long to generate"); } const downloadUrl = await waitForVideo(videoId);
import axios from 'axios'; import { writeFileSync } from 'fs'; async function scriptToShortVideo(script, outputPath = './output.mp4') { const client = axios.create({ baseURL: 'https://api.invideo.io/v1', headers: { Authorization: `Bearer ${process.env.INVIDEO_API_KEY}` } }); // 1 โ Start generation const { data } = await client.post('/videos/generate', { script, format: "9:16", duration: "short", style: "dynamic", voiceover: { enabled: true, voice: "en-US-female-1", speed: 1.05 }, captions: { enabled: true, style: "bold-bottom", highlight: true }, music: { enabled: true, mood: "upbeat", volume: 0.25 } }); const videoId = data.videoId; console.log(`Generation started โ ID: ${videoId}`); // 2 โ Wait for completion let exportUrl = null; while (!exportUrl) { await new Promise(r => setTimeout(r, 6000)); const status = await client.get(`/videos/${videoId}/status`); if (status.data.state === "completed") exportUrl = status.data.exportUrl; if (status.data.state === "failed") throw new Error("Generation failed"); console.log(`Progress: ${status.data.progress}%`); } // 3 โ Download the video const videoStream = await axios.get(exportUrl, { responseType: 'arraybuffer' }); writeFileSync(outputPath, videoStream.data); console.log(`Video saved to ${outputPath}`); return { videoId, exportUrl, localPath: outputPath }; } // Usage await scriptToShortVideo( "3 productivity hacks that changed my life. Number 1: Time blocking...", "./my-reel.mp4" );
const scripts = [ { topic: "morning routine tips", voice: "en-US-female-1", mood: "calm" }, { topic: "5 foods to boost energy", voice: "en-US-male-1", mood: "upbeat" }, { topic: "how to learn faster", voice: "en-US-female-2", mood: "inspiring" } ]; const jobs = await Promise.all( scripts.map(s => client.post('/videos/generate', { script: s.topic, format: "9:16", duration: "short", style: "dynamic", voiceover: { enabled: true, voice: s.voice }, music: { enabled: true, mood: s.mood, volume: 0.3 }, captions: { enabled: true, style: "bold-bottom" } }) ) ); const videoIds = jobs.map(j => j.data.videoId); console.log("All jobs started:", videoIds);
When asked to create a short-form video, Claude will: Analyze the script or topic provided by the user Optimize the script for short-form pacing (hook in first 3 seconds) Select the right style, voice, music mood, and caption style Call the InVideo API to generate the video Poll the status endpoint until the video is ready Return the download URL or save the MP4 locally Suggest platform-specific tweaks (TikTok vs Reels vs Shorts)
PlatformFormatDurationCaption StyleMusicTikTok9:1615โ60sBold bottom, word highlightUpbeat / trendingInstagram Reels9:1615โ90sBold bottom or centeredUpbeat / chillYouTube Shorts9:1615โ60sClean bottomOptionalLinkedIn Video16:9 or 1:130โ90sProfessional, top-alignedSubtle / none
Hook in 3 seconds โ start with a bold claim, question, or shocking stat One idea per video โ don't try to cover too much ground Short sentences โ 8โ12 words max per caption line Call to action at the end โ "Follow for more", "Comment below", "Save this" Conversational tone โ write how people talk, not how they write Numbers perform โ "3 tips", "5 mistakes", "1 rule" always outperform vague titles
{ "videoId": "iv_7f3k29xm", "title": "3 Startup Lessons Nobody Tells You", "platform": "tiktok", "format": "9:16", "durationSeconds": 42, "exportUrl": "https://cdn.invideo.io/exports/iv_7f3k29xm.mp4", "captions": true, "voiceover": "en-US-male-1", "musicMood": "upbeat", "createdAt": "2025-02-25T10:00:00Z", "status": "completed" }
Always start with a strong hook โ the first 2โ3 seconds determine if users keep watching Keep scripts between 120โ200 words for a 30โ60 second video Use bold captions with word highlighting โ it significantly increases watch time Set music volume to 0.2โ0.3 so it never overpowers the voiceover Generate 3โ5 variations of the same script with different styles to A/B test For TikTok, use a slightly faster voiceover speed (1.1x) to match platform energy Always review the video before publishing โ AI generations may need minor tweaks
try { const response = await client.post('/videos/generate', payload); return response.data.videoId; } catch (error) { if (error.response?.status === 401) throw new Error("Invalid InVideo API key"); if (error.response?.status === 429) throw new Error("Rate limit hit โ wait before retrying"); if (error.response?.status === 400) throw new Error(`Bad request: ${error.response.data.message}`); throw error; }
An InVideo account โ https://invideo.sjv.io/TBB A plan with API access enabled (Business plan or above) A valid API Key from your InVideo settings Node.js 18+ and axios for API calls Optional: ffmpeg locally if you need to post-process or compress the exported MP4
Writing, remixing, publishing, visual generation, and marketing content production.
Largest current source with strong distribution and engagement signals.