---
title: ToolRouter — Tool Detail
description: Detailed documentation for a ToolRouter tool including skills, parameters, and examples.
url: https://toolrouter.com/tools/video-edit
---
# AI Video Edit

Transform videos with AI. EDIT: swap characters, change environments. RESTYLE: style transfer (anime, painting). MOTION CONTROL: transfer motion onto a character image (put yourself in a movie). Powered by Kling O1/V3.

- **Version:** 0.01
- **Categories:** media, ai
- **Workflow:** edit_video → restyle_video → motion_control → check_video

## Skills (4)

### Edit Video (`edit_video`)

Targeted AI edits on an existing video — swap characters, change environments, modify objects — while preserving original motion and camera angles. Reference elements with @Element1 and style images with @Image1 in the prompt. Powered by Kling O1. Input: 3-10s video. ⏱ Takes ~60-120s, runs async.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `prompt` | string | Yes | Natural language edit instruction. Use @Element1, @Element2 to reference elements and @Image1, @Image2 to reference style images. |
| `video_url` | string | Yes | Source video URL (.mp4/.mov/.webm/.gif). 3-10s, 720-2160px, max 200 MB. Always pass the URL directly. |
| `image_urls` | array | No | Style reference images. Referenced in the prompt as @Image1, @Image2, etc. Max 4 combined with elements. |
| `elements` | array | No | Character/object elements to include. Reference in prompt as @Element1, @Element2, etc. Max 4 combined with image_urls. |
| `keep_audio` | boolean | No | Preserve original audio from the source video. Default: false (silent output). |
| `estimated_duration` | number | No | Estimated duration of the input video in seconds (for cost estimation). Default: 5. |

**Returns:** Edited video download URL, file metadata, request ID, and estimated cost

**Examples:**

*Swap a character in a video using a reference photo:*

```json
{
  "prompt": "Replace the main character with @Element1, keeping the same movements and camera angles",
  "video_url": "https://example.com/movie-clip.mp4",
  "elements": [
    {
      "frontal_image_url": "https://example.com/my-photo.jpg"
    }
  ]
}
```

*Change the environment of a video:*

```json
{
  "prompt": "Transform the background into a tropical beach at sunset while keeping the person unchanged",
  "video_url": "https://example.com/outdoor-scene.mp4"
}
```

### Restyle Video (`restyle_video`)

Broad style transformation of a video — anime, painting, weather changes, time-of-day shifts — using the original as a motion/structure reference. Regenerates the video in a new style while preserving movement and composition. Powered by Kling O1. Input: 3-10s video. ⏱ Takes ~60-120s, runs async.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `prompt` | string | Yes | Style transformation instruction. Use @Image1, @Image2 for style reference images and @Element1, @Element2 for character elements. |
| `video_url` | string | Yes | Source video URL (.mp4/.mov/.webm/.gif). 3-10s, 720-2160px, max 200 MB. Always pass the URL directly. |
| `image_urls` | array | No | Style reference images. Referenced in the prompt as @Image1, @Image2, etc. Max 4 combined with elements. |
| `elements` | array | No | Character/object elements to include. Reference in prompt as @Element1, @Element2, etc. Max 4 combined with image_urls. |
| `keep_audio` | boolean | No | Preserve original audio from the source video. Default: false (silent output). |
| `aspect_ratio` | string | No | Output aspect ratio. Default: auto (matches input). (auto, 16:9, 9:16, 1:1) |
| `duration` | number | No | Output video duration in seconds (3-10). Default: matches input. |
| `estimated_duration` | number | No | Estimated duration of the input video in seconds (for cost estimation). Default: 5. |

**Returns:** Restyled video download URL, file metadata, request ID, and estimated cost

**Examples:**

*Transform a video into anime style:*

```json
{
  "prompt": "Transform this video into a Studio Ghibli-style anime animation with soft watercolor textures",
  "video_url": "https://example.com/real-footage.mp4"
}
```

*Apply a style reference image to a video:*

```json
{
  "prompt": "Apply the artistic style of @Image1 to this video, keeping the original motion intact",
  "video_url": "https://example.com/scene.mp4",
  "image_urls": [
    "https://example.com/reference-painting.jpg"
  ]
}
```

### Motion Control (`motion_control`)

Transfer motion from a reference video onto a character image — put yourself in a movie scene or make a photo dance. Provide character photo (image_url) + motion video (video_url). Kling V3 Pro. ⏱ ~60-120s, async.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `image_url` | string | Yes | Character/appearance image URL — the person or character to animate. Always pass the URL directly. |
| `video_url` | string | Yes | Motion reference video URL — the movements to transfer onto the character (.mp4, .mov). |
| `character_orientation` | string | Yes | Output orientation. "image" = matches the reference image orientation (max 10s). "video" = matches the reference video orientation (max 30s). (image, video) |
| `prompt` | string | No | Optional text description to guide the generation. |
| `keep_original_sound` | boolean | No | Retain audio from the reference video. Default: true. |
| `elements` | array | No | Optional element for facial consistency binding (max 1). Requires character_orientation="video". |
| `estimated_duration` | number | No | Estimated duration of the input video in seconds (for cost estimation). Default: 5. |

**Returns:** Generated video download URL, file metadata, request ID, and estimated cost

**Examples:**

*Put yourself into a movie scene:*

```json
{
  "image_url": "https://example.com/my-photo.jpg",
  "video_url": "https://example.com/movie-scene.mp4",
  "character_orientation": "video",
  "prompt": "The character walks confidently through the scene"
}
```

*Make a photo dance:*

```json
{
  "image_url": "https://example.com/portrait.jpg",
  "video_url": "https://example.com/dance-moves.mp4",
  "character_orientation": "image"
}
```

### Check Video (`check_video`)

Check the status of a pending video edit/restyle/motion-control job and retrieve the result if complete. Use this when a previous call returned a pending status with a fal_request_id.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `fal_request_id` | string | Yes | The fal.ai request ID returned by a previous edit_video, restyle_video, or motion_control call |
| `fal_model_id` | string | No | The fal.ai model ID from the pending response. Defaults to the edit endpoint if omitted. |

**Returns:** Job status (completed/running/queued/failed) and video URL if complete

**Examples:**

*Check on a pending video edit:*

```json
{
  "fal_request_id": "abc123-def456"
}
```

*Check a motion control job with specific model ID:*

```json
{
  "fal_request_id": "xyz789-uvw012",
  "fal_model_id": "fal-ai/kling-video/v3/pro/motion-control"
}
```

## Quick Start

```bash
# Via CLI
TOOLROUTER_API_KEY=tr_live_xxx npx -y toolrouter-mcp call video-edit edit_video --prompt Replace the main character with @Element1, keeping the same movements and camera angles --video_url https://example.com/movie-clip.mp4 --elements [object Object]

# Via REST API
curl -H "Authorization: Bearer tr_live_xxx" \
     -d '{"tool":"video-edit","skill":"edit_video","input":{"prompt":"Replace the main character with @Element1, keeping the same movements and camera angles","video_url":"https://example.com/movie-clip.mp4","elements":[{"frontal_image_url":"https://example.com/my-photo.jpg"}]}}' \
     https://api.toolrouter.com/v1/tools/call
```

## Frequently Asked Questions

### What is the difference between edit, restyle, and motion control?

`edit_video` makes targeted changes inside an existing clip, `restyle_video` transforms the overall visual style, and `motion_control` transfers motion from a source clip onto a character image. They solve different kinds of video transformation rather than repeating the same workflow.

### What kind of source video works best?

Pass a direct video URL for a short clip, typically 3 to 10 seconds, in a common format like MP4, MOV, or WebM. The manifest also calls out a practical resolution range of roughly 720 to 2160 pixels.

### Can I preserve the original audio?

Yes. The edit and restyle flows include audio-preservation options, and motion control can keep the original sound from the reference video when that helps the final result.

### How do I know when a video edit is finished?

These edits run asynchronously. Start the job, keep the returned request ID, and use `check_video` to poll the status until the output video is ready.

---

## Get Started with ToolRouter

**Already connected?** Call any tool with `use_tool({ tool, skill, input })`. Browse tools with `discover` or visit https://toolrouter.com/llms-full.txt

**New to ToolRouter?** Connect with one command (no API key needed — auto-provisions on first use):

```bash
# MCP (Claude Code, Codex CLI)
claude mcp add toolrouter -- npx -y toolrouter-mcp

# MCP (Cursor, Windsurf, Cline, VS Code, Gemini CLI, Claude Desktop)
{"mcpServers":{"toolrouter":{"command":"npx","args":["-y","toolrouter-mcp"]}}}

# Claude Chat / Claude Cowork / Claude Mobile — add as a connector:
# Settings → Connectors → Add custom connector → URL: https://api.toolrouter.com/mcp

# ChatGPT — add as an app:
# Settings → Apps → Advanced settings → enable Developer mode → Create app → MCP Server URL: https://api.toolrouter.com/mcp

# CLI (works instantly, no restart needed)
npx -y toolrouter-mcp tools                    # browse all tools
npx -y toolrouter-mcp search "seo"             # search by keyword
npx -y toolrouter-mcp call seo analyze_page --url https://example.com
```

Free tools work immediately. For paid tools, visit https://toolrouter.com/claim to add credits.

All platforms: https://toolrouter.com/connect | Full catalog: https://toolrouter.com/llms-full.txt | Docs: https://toolrouter.com/docs