g4dr-short-video-creator
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install clawskills:clawskills~g4dr-short-video-creatorcURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aclawskills~g4dr-short-video-creator/file -o g4dr-short-video-creator.md# Short-Form Video Creation for Social Media Skill
## Overview
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
---
## What This Skill Does
- 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
---
## Step 1 — Get Your InVideo API Access
1. Go to **https://invideo.sjv.io/TBB** and create an account
2. Choose a plan that includes **API access** (Business plan or above)
3. Navigate to **Settings → API** or **Developer Settings**
4. Copy your **API Key**: `iv_api_xxxxxxxxxxxxxxxx`
5. Store it safely:
```bash
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.
---
## Step 2 — Install Dependencies
```bash
npm install axios form-data fs-extra
```
---
## InVideo API — Core Endpoints
**Base URL:** `https://api.invideo.io/v1`
All requests require:
```
Authorization: Bearer YOUR_INVIDEO_API_KEY
Content-Type: application/json
```
### Generate a Video from Script
```http
POST https://api.invideo.io/v1/videos/generate
```
### Get Video Generation Status
```http
GET https://api.invideo.io/v1/videos/{videoId}/status
```
### Download / Export Video
```http
GET https://api.invideo.io/v1/videos/{videoId}/export
```
---
## Examples
### Generate a TikTok / Reel from a Script
```javascript
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);
```
---
### Poll for Completion and Get Download URL
```javascript
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);
```
---
### Full Pipeline: Script → Video → Download
```javascript
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"
);
```
---
### Batch Generate Multiple Videos
```javascript
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);
```
---
## Video Creation Workflow
When asked to create a short-form video, Claude will:
1. **Analyze** the script or topic provided by the user
2. **Optimize** the script for short-form pacing (hook in first 3 seconds)
3. **Select** the right style, voice, music mood, and caption style
4. **Call** the InVideo API to generate the video
5. **Poll** the status endpoint until the video is ready
6. **Return** the download URL or save the MP4 locally
7. **Suggest** platform-specific tweaks (TikTok vs Reels vs Shorts)
---
## Platform-Specific Settings
| Platform | Format | Duration | Caption Style | Music |
|---|---|---|---|---|
| TikTok | 9:16 | 15–60s | Bold bottom, word highlight | Upbeat / trending |
| Instagram Reels | 9:16 | 15–90s | Bold bottom or centered | Upbeat / chill |
| YouTube Shorts | 9:16 | 15–60s | Clean bottom | Optional |
| LinkedIn Video | 16:9 or 1:1 | 30–90s | Professional, top-aligned | Subtle / none |
---
## Script Optimization Tips (Claude Will Apply These)
- **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 t