# Agnes Videogen

> Generate videos using the Agnes Video V2.0 model API. Use when the user asks to generate videos via Agnes AI platform (apihub.agnes-ai.com). Triggers on: agnes video, agnes 视频, video gen, generate video, text to video, image to video, keyframe interpolation, 生视频, 文生视频, 图生视频.

- Skill: `ziho7/agnes-videogen` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ziho7/agnes-videogen`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ziho7/agnes-videogen/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ziho7 (https://skillmd.com/u/ziho7)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ziho7/agnes-videogen

---


# Agnes Video Generation

Generate videos using the Agnes Video V2.0 API.

## Prerequisites

- An Agnes AI API key from [API Platform](https://platform.agnes-ai.com)
- Base URL: `https://apihub.agnes-ai.com/v1`

## API Architecture

Agnes Video V2.0 uses an **asynchronous two-step workflow**:
1. **Create Video Task** — submit the request, get a `video_id`
2. **Retrieve Video Result** — poll the `video_id` to get the final video

## API Endpoints

### Step 1: Create Video Task

**Endpoint:** `POST https://apihub.agnes-ai.com/v1/videos`

**Headers:**
- `Authorization: Bearer YOUR_API_KEY`
- `Content-Type: application/json`

### Step 2: Retrieve Video Result

**Endpoint:** `GET https://apihub.agnes-ai.com/agnesapi?video_id=<VIDEO_ID>`

**Headers:**
- `Authorization: Bearer YOUR_API_KEY`

**Optional parameter:** `model_name` — specify model explicitly (e.g., `agnes-video-v2.0`)

**Legacy method (compatibility):** `GET https://apihub.agnes-ai.com/v1/videos/<TASK_ID>`

## Model Name

`agnes-video-v2.0`

## Request Parameters (Create Task)

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| model | string | Yes | Use `agnes-video-v2.0` |
| prompt | string | Yes | Text description of the video content |
| image | string / array | No | Image URL or image URL array (for image-to-video) |
| mode | string | No | Generation mode: `ti2vid` (text-to-video) or `keyframes` |
| height | integer | No | Video height. Default: `768` |
| width | integer | No | Video width. Default: `1152` |
| num_frames | integer | No | Number of frames. Must be ≤ 441, follows `8n + 1` rule |
| frame_rate | number | No | Video FPS. Range: 1–60 |
| num_inference_steps | integer | No | Number of inference steps |
| seed | integer | No | Random seed for reproducible results |
| negative_prompt | string | No | Content to avoid |
| extra_body.image | array | No | Input image URLs for multi-image or keyframe mode |
| extra_body.mode | string | No | Additional mode setting, e.g., `keyframes` |

## Workflows

### 1. Text-to-Video

```bash
curl -X POST https://apihub.agnes-ai.com/v1/videos \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "agnes-video-v2.0",
    "prompt": "A cinematic shot of a cat walking on the beach at sunset, soft ocean waves, warm golden lighting, realistic motion",
    "height": 768,
    "width": 1152,
    "num_frames": 121,
    "frame_rate": 24
  }'
```

**Response:**
```json
{
  "id": "task_YOUR_TASK_ID",
  "task_id": "task_YOUR_TASK_ID",
  "video_id": "video_YOUR_VIDEO_ID",
  "object": "video",
  "model": "agnes-video-v2.0",
  "status": "queued",
  "progress": 0,
  "created_at": 1780457477,
  "seconds": "10.0",
  "size": "1280x768"
}
```

### 2. Image-to-Video (single image)

```bash
curl -X POST https://apihub.agnes-ai.com/v1/videos \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "agnes-video-v2.0",
    "prompt": "The woman slowly turns around and looks back at the camera, natural facial expression, cinematic camera movement",
    "image": "https://example.com/image.png",
    "num_frames": 121,
    "frame_rate": 24
  }'
```

### 3. Multi-Image Video

```bash
curl -X POST https://apihub.agnes-ai.com/v1/videos \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "agnes-video-v2.0",
    "prompt": "Create a smooth transformation scene between the two reference images, cinematic lighting, consistent character identity, natural motion",
    "extra_body": {
      "image": [
        "https://example.com/image1.png",
        "https://example.com/image2.png"
      ]
    },
    "num_frames": 121,
    "frame_rate": 24
  }'
```

### 4. Keyframe Interpolation

```bash
curl -X POST https://apihub.agnes-ai.com/v1/videos \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "agnes-video-v2.0",
    "prompt": "Generate a smooth cinematic transition between the keyframes, maintaining visual consistency and natural camera movement",
    "extra_body": {
      "image": [
        "https://example.com/keyframe1.png",
        "https://example.com/keyframe2.png"
      ],
      "mode": "keyframes"
    },
    "num_frames": 121,
    "frame_rate": 24
  }'
```

### Retrieve Video Result

Poll until `status` is `"completed"` and `progress` is `100`:

```bash
curl --location --request GET \
  'https://apihub.agnes-ai.com/agnesapi?video_id=video_xxxxxx' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

**Completed response:**
```json
{
  "id": "task_YOUR_TASK_ID",
  "video_id": "video_YOUR_VIDEO_ID",
  "model": "agnes-video-v2.0",
  "object": "video",
  "status": "completed",
  "progress": 100,
  "seconds": "10.0",
  "size": "1280x768",
  "remixed_from_video_id": "https://storage.googleapis.com/agnes-aigc/aigc/videos/2026/06/03/video_xxxxxx.mp4",
  "error": null
}
```

Final video URL: `remixed_from_video_id`

## Result Fields

| Field | Type | Description |
|-------|------|-------------|
| id | string | Task ID |
| video_id | string | Video ID |
| model | string | Model used |
| object | string | Always `"video"` |
| status | string | Task status (`queued`, `processing`, `completed`, `failed`) |
| progress | integer | Progress percentage (0–100) |
| seconds | string | Video duration |
| size | string | Video resolution (e.g., `"1280x768"`) |
| remixed_from_video_id | string | Final video URL (only when completed) |
| error | string / null | Error message if failed |

## Important Notes

- **Asynchronous workflow**: Submit → get `video_id` → poll for result
- `num_frames` must follow `8n + 1` rule and be ≤ 441
- `frame_rate` range: 1–60
- Default resolution: 1152×768
- Recommended polling interval: 5–10 seconds
- Timeout recommended: 60s–360s for create request
- Pricing: Currently free during beta

## Supported Capabilities

- Text-to-Video generation
- Image-to-Video generation
- Multi-image video composition
- Keyframe interpolation
- Custom resolution, frame rate, and duration
- Reproducible results via seed

