g4dr-short-video-creator

ClawSkills 作者 clawskills

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install clawskills:clawskills~g4dr-short-video-creator
cURL直接下载,无需登录
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