End-to-end AI video production through the Hyper MCP — text-to-video and image-to-video generation (Sora, Veo, Seedance), scene chaining, video analysis, transcription, subtitles, TikTok / karaoke captions, voiceover (TTS), audio mixing, clipping, stitching, and text overlays. Use when the user asks to generate a video, create UGC, scene-chain, add captions or subtitles, add narration, stitch clips, clip a podcast highlight, or do any AI video editing.
Scanned 5/27/2026
Install via CLI
openskills install hyperfx-ai/marketing-skills---
name: video-generation
description: End-to-end AI video production through the Hyper MCP — text-to-video and image-to-video generation (Sora, Veo, Seedance), scene chaining, video analysis, transcription, subtitles, TikTok / karaoke captions, voiceover (TTS), audio mixing, clipping, stitching, and text overlays. Use when the user asks to generate a video, create UGC, scene-chain, add captions or subtitles, add narration, stitch clips, clip a podcast highlight, or do any AI video editing.
---
# Video Generation & Editing
Guide for generating, editing, analyzing, and post-processing videos using AI models and FFmpeg-backed tools exposed through the Hyper MCP.
## Requirements
This skill assumes the [Hyper MCP](https://app.hyperfx.ai/mcp) is connected to your agent so the tools below are available. The underlying providers (OpenAI Sora, Google Veo, ByteDance Seedance, OpenAI TTS, transcription, etc.) are configured under your Hyper integrations.
## Tool surface
| Group | Tools |
|-------|-------|
| Generation | `generate_video`, `sora_remix_video`, `sora_delete_video` |
| Analysis | `analyze_video`, `capture_video_frame`, `transcribe_video` |
| Subtitles & captions | `generate_subtitles`, `burn_subtitles`, `burn_highlighted_captions` |
| Audio | `text_to_speech`, `add_audio_to_video` |
| Editing | `clip_video`, `stitch_videos`, `overlay_text` |
## Out of scope
- Image generation, ad creative composition, brand extraction — use `image-generation` or `ad-creative-generation`.
- Posting finished videos to social platforms — use `tiktok`, `instagram`, or `linkedin`.
- Running paid video campaigns — use `google-ads`, `meta-ads`, `tiktok-ads`.
## Available Tools
| Tool | Purpose | Runs in Background |
|------|---------|-------------------|
| `generate_video` | Generate video from text / image prompt | Yes |
| `sora_remix_video` | Modify existing Sora video | Yes |
| `sora_delete_video` | Delete a Sora video | No |
| `capture_video_frame` | Extract frame as image | No |
| `analyze_video` | Watch and understand video content | No |
| `transcribe_video` | Extract audio transcript | No |
| `generate_subtitles` | Create SRT / VTT subtitle file | No |
| `burn_subtitles` | Burn subtitles onto video | Yes |
| `burn_highlighted_captions` | TikTok / karaoke-style word-by-word captions | Yes |
| `text_to_speech` | Generate voiceover audio from text | No |
| `add_audio_to_video` | Add / replace audio track on video | Yes |
| `clip_video` | Extract a time segment from video | Yes |
| `stitch_videos` | Concatenate multiple clips | Yes |
| `overlay_text` | Add text / titles to video | Yes |
## Video Understanding
You can **watch and analyze any video** using `analyze_video`. This sends the video to a multimodal AI that sees both visual and audio content.
### When to use `analyze_video`
- After generating a video: check if it matches your intent
- Before stitching: verify scene consistency across clips
- Quality review: check for glitches, character drift, lighting issues
- Content understanding: "what happens in this video?"
### Analysis Types
```python
analyze_video(file_id="...", analysis_type="general")
analyze_video(file_id="...", analysis_type="quality_review")
analyze_video(file_id="...", analysis_type="scene_breakdown")
analyze_video(file_id="...", question="Does this match: [original prompt]?")
```
### Self-Review Workflow
Always review generated videos before delivering to the user:
```python
result = generate_video(prompt="...", model="veo-3.1-generate-preview")
review = analyze_video(file_id="video_file_id", analysis_type="quality_review")
# If issues found, regenerate with adjustments. If quality is good, proceed to editing.
```
## Script Planning
For longer, cohesive videos, plan the FULL SCRIPT before generating:
### 1. Scene Breakdown
- **Scenes:** break story into segments
- Sora: 4 / 8 / 12 seconds per scene
- Veo: 4-8 seconds per scene
- Seedance: 4-15 seconds per scene (native audio with lip-sync)
- **Camera:** shot type (wide, close-up, tracking), angles, movement
- **Transitions:** how each scene connects to the next
- **Consistency:** character descriptions, color palette, visual style
## Scene Chaining Technique
To create seamless multi-scene videos:
### Scene 1 (text-to-video)
```python
generate_video(prompt="...", model="veo-3.1-generate-preview")
```
### Scene 2+ (image-to-video)
```python
capture_video_frame(video_file_id="scene1_file_id", frame_position="last")
generate_video(prompt="continuation: ...", image_file_id="captured_frame_id")
```
Repeat: extract last frame → generate next scene.
### Stitching Scenes Together
After generating all scenes, combine them:
```python
stitch_videos(video_file_ids=["scene1_id", "scene2_id", "scene3_id"])
stitch_videos(
video_file_ids=["scene1_id", "scene2_id", "scene3_id"],
transition="crossfade",
crossfade_duration=0.5,
)
```
## Subtitle / Caption Workflow
### Full pipeline: Video → Transcript → Subtitles → Burned Video
```python
transcript = transcribe_video(file_id="video_file_id")
subs = generate_subtitles(file_id="video_file_id", transcript=transcript, format="srt")
burn_subtitles(
video_file_id="video_file_id",
subtitle_file_id=subs.file_id,
style="bold_outline",
position="bottom",
)
```
### Subtitle Styles
| Style | Effect |
|-------|--------|
| `default` | Plain white text |
| `bold_outline` | Bold white with black outline (recommended) |
| `shadow` | White text with drop shadow |
| `box` | White text on semi-transparent black box |
## Text Overlays
Add titles, lower-thirds, CTAs, and other graphics:
```python
overlay_text(
video_file_id="video_file_id",
overlays=[
{
"text": "Episode 1: The Beginning",
"start_time": 0.0,
"end_time": 3.0,
"position": "center",
"font_size": 48,
"color": "white",
"background": "black@0.5",
},
{
"text": "Subscribe for more!",
"start_time": 10.0,
"end_time": 14.0,
"position": "bottom-right",
"font_size": 28,
},
],
)
```
### Overlay Positions
`top`, `bottom`, `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right`
## Voiceover / Narration
Generate natural-sounding voiceover with TTS and add it to any video:
```python
audio = text_to_speech(
text="Welcome to our product. Here's how it works...",
voice="nova",
model="tts-1",
)
add_audio_to_video(
video_file_id="video_id",
audio_file_id=audio.file_id,
mode="replace",
)
add_audio_to_video(
video_file_id="video_id",
audio_file_id=audio.file_id,
mode="mix",
audio_volume=0.8,
)
```
### Available Voices
`alloy`, `ash`, `coral`, `echo`, `fable`, `nova` (recommended), `onyx`, `sage`, `shimmer`
## Highlighted Captions (TikTok / Reels Style)
Add word-by-word highlighted captions that light up as spoken:
```python
burn_highlighted_captions(
video_file_id="video_id",
style="tiktok",
highlight_color="#3B82F6",
base_color="white",
words_per_group=3,
position="center",
)
burn_highlighted_captions(
video_file_id="video_id",
style="karaoke",
highlight_color="yellow",
base_color="white",
background="black@0.6",
words_per_group=4,
position="bottom",
)
```
## Video Clipping
Extract segments from longer videos:
```python
clip_video(
video_file_id="long_video_id",
start_time=45.0,
end_time=60.0,
)
```
## UGC / TikTok Production Workflow
Complete workflow for producing UGC-style content:
1. **Script:** plan scenes, dialogue, and visual style
2. **Generate:** create each scene with `generate_video`
3. **Review:** use `analyze_video` to check each scene for quality
4. **Chain:** extract last frames with `capture_video_frame`, generate next scenes
5. **Stitch:** combine all scenes with `stitch_videos`
6. **Narrate:** generate voiceover with `text_to_speech` + `add_audio_to_video`
7. **Caption:** add TikTok-style captions with `burn_highlighted_captions`
8. **Overlay:** add titles / CTAs with `overlay_text`
9. **Final review:** use `analyze_video` on the final video for quality check
### Example: Narrated UGC Video
```python
generate_video(prompt="...", model="veo-3.1-generate-preview")
audio = text_to_speech(text="Your narration script here...", voice="nova")
add_audio_to_video(video_file_id="generated_video_id", audio_file_id=audio.file_id)
burn_highlighted_captions(video_file_id="narrated_video_id", style="tiktok")
```
### Example: Podcast to Short-Form Clips
```python
transcript = transcribe_video(file_id="podcast_video_id")
analysis = analyze_video(
file_id="podcast_video_id",
question="Identify the 3 most memorable / quotable moments with timestamps",
analysis_type="scene_breakdown",
)
clip_video(video_file_id="podcast_video_id", start_time=120.0, end_time=150.0)
clip_video(video_file_id="podcast_video_id", start_time=340.0, end_time=365.0)
stitch_videos(video_file_ids=["clip1_id", "clip2_id"])
burn_highlighted_captions(video_file_id="stitched_id", style="tiktok")
```
## Prompt Structure
Each scene prompt should include:
- "Continuation of previous scene" (for scenes 2+)
- Consistent character / setting descriptions
- Specific action for this segment
- Camera movement direction
## Control Principles (most important)
- Treat API params as the **container** and prompt text as the **content**:
- `model`, `size` / `aspect_ratio`, and `duration_seconds` must be set explicitly in the tool call.
- Do not expect prose like "make it longer" or "make it vertical" to override API parameters.
- Use detail for control, brevity for exploration:
- Short prompts give more creative variation.
- Detailed prompts improve consistency and shot control.
- Iterate in small steps:
- Change one major variable at a time (camera, lighting, action, or palette).
- Keep what works fixed and only modify the target dimension.
## Key Parameters
| Parameter | Description |
|-----------|-------------|
| `image_file_id` | Use for image-to-video (scene continuity) |
| `capture_video_frame` | Extract frames with `position="last"` \| `"first"` \| `"middle"` |
| `size` | For Sora only. One of: `"720x1280"`, `"1280x720"`, `"1024x1792"`, `"1792x1024"` |
| `aspect_ratio` | For Veo only. One of: `"16:9"` or `"9:16"` |
| `duration_seconds` | Sora: 4, 8, or 12 seconds only. Veo: 4-8 seconds |
## Important Input Rules
- Use exact values accepted by the tool schema. Do not send aliases like `landscape`, `portrait`, `720p`, or `1080p`.
- For Sora, prefer `size` and do not send `aspect_ratio`.
- For Veo, prefer `aspect_ratio` and do not send `size`.
- For Seedance, use `aspect_ratio` and optionally `resolution`. Do not pass `size`.
- Keep the same `size` / `aspect_ratio` across chained scenes for continuity.
## Model Selection Guide
**When the user mentions a specific model name, always use that model.** Map user requests to the correct `model` parameter:
| User says | `model` parameter |
|-----------|-------------------|
| "use seedance", "seedance video" | `"seedance-2"` |
| "fast seedance" | `"seedance-2-fast"` |
| "use sora", "sora video" | `"sora-2"` |
| "sora pro" | `"sora-2-pro"` |
| "use veo", "veo video" | `"veo-3.1-generate-preview"` |
| "fast veo" | `"veo-3.1-fast-generate-preview"` |
## Model-Specific Parameter Matrix
- **Sora models (`sora-2`, `sora-2-pro`)**
- Allowed sizing parameter: `size`
- Allowed `size` values: `"720x1280"`, `"1280x720"`, `"1024x1792"`, `"1792x1024"`
- Do not pass `aspect_ratio`
- Practical default pair: `"1280x720"` or `"720x1280"`
- **Veo models (`veo-3.1-generate-preview`, `veo-3.1-fast-generate-preview`)**
- Allowed sizing parameter: `aspect_ratio`
- Allowed `aspect_ratio` values: `"16:9"`, `"9:16"`
- Do not pass `size`
- **Seedance models (`seedance-2`, `seedance-2-fast`)**
- Allowed sizing parameters: `aspect_ratio` and `resolution`
- Allowed `aspect_ratio` values: `"16:9"`, `"9:16"`, `"1:1"`, `"4:3"`, `"3:4"`
- Allowed `resolution` values: `"480p"`, `"720p"`
- Supports `generate_audio=true` for native audio with lip-sync
- Do not pass `size`
## Duration Limits
- **Sora:** 4, 8, or 12 seconds per generation. Use scene chaining + `stitch_videos` for longer videos.
- **Veo:** 4, 5, 6, 7, or 8 seconds per generation.
- **Seedance:** 4-15 seconds per generation (most flexible). Supports `generate_audio=true` for native audio with lip-sync.
## High-Control Prompt Template
Use this structure when you want predictable output:
```text
Style/Tone: [realistic, cinematic, animation, documentary, etc.]
Subject/World: [who/what is in frame, key visual anchors]
Camera: [shot size + angle + movement]
Lighting/Palette: [light direction + 3-5 color anchors]
Action Beats:
- [beat 1 with timing/count]
- [beat 2 with timing/count]
- [beat 3 with timing/count]
Audio/Dialogue: [short lines or ambient cues]
Constraints: [no logos/brands, no text overlays, etc.]
```
## Best Practices
1. **Review before delivering:** always use `analyze_video` to check your output.
2. **Maintain visual consistency:** use the same character descriptions, lighting, and style across all scenes.
3. **Plan transitions:** design the end of each scene to flow into the next.
4. **Batch similar scenes:** generate scenes with similar settings together.
5. **Review before chaining:** check each scene before using its last frame for the next.
6. **Use single-variable iteration:** remix / regenerate by changing one variable at a time.
7. **Add captions for accessibility:** use the subtitle pipeline for all UGC content.
No comments yet. Be the first to comment!