keevx-image-to-video
by @baidu-xiling
Convert images to videos using Keevx API with support for multiple models, resolutions up to 4K, audio generation, and batch processing.
clawhub install keevx-image-to-videoπ About This Skill
name: keevx-image-to-video description: Use the Keevx API to convert images to videos. Supports multiple models (V/KL), various resolutions (720p/1080p/4K), and audio generation. Use this skill when the user needs to: (1) Convert images to video (2) Generate video with Keevx (3) Create and query image-to-video tasks (4) Batch image-to-video conversion. Keywords: image to video, Keevx, video generation.
Keevx Image-to-Video Skill
Convert images to high-quality videos via the Keevx API.
Prerequisites
Set the environment variable KEEVX_API_KEY, obtained from https://www.keevx.com/main/home. Documentation: https://docs.keevx.com
export KEEVX_API_KEY="your_api_key_here"
API Endpoints
https://api.keevx.com/v1POST /figure-resource/upload/file (Content-Type: multipart/form-data)POST /image_to_video (Content-Type: application/json)GET /image_to_video/{task_id}Authorization: Bearer $KEEVX_API_KEYsource: skill HeaderModel Selection
| Parameter | Model V (General, Recommended) | Model KL (Multi-Reference) | |-----------|------|--------| | prompt | β Required, max 1000 chars | β Required | | image_url | Required for single-image mode, max 20MB | β Not supported | | reference_images | Required for multi-image mode, max 3 images, each max 20MB | β Required, max 7 images, each max 20MB | | aspect_ratio | β 16:9 / 9:16 | β 16:9 / 9:16 | | aspect_resolution | 720p / 1080p / 4k | 720p / 1080p | | duration | Single-image: 4/6/8s, Multi-image: fixed 8s | 5 / 10s | | generate_audio | β Supported, default false | β Not supported | | generate_count | Optional 1-4 | Optional 1-4 | | callback_url | Optional | Optional |
Model Selection Guide
Model-Specific Request Bodies
#### Model V
{
"model": "V",
"prompt": "Video description (required, max 1000 chars)",
"image_url": "https://... (required for single-image mode)",
"reference_images": ["https://..."],
"aspect_ratio": "16:9",
"aspect_resolution": "720p | 1080p | 4k",
"duration": 4,
"generate_audio": true,
"generate_count": 1
}
#### Model KL
{
"model": "KL",
"prompt": "Video description (required)",
"reference_images": ["https://..."],
"aspect_ratio": "16:9",
"aspect_resolution": "720p | 1080p",
"duration": 5,
"generate_count": 1
}
Image Input Handling
User-provided images may be URLs or local file paths, handle accordingly:
http:// or https://): Use directly as image_url or reference_imagesUpload Local File
curl --location 'https://api.keevx.com/v1/figure-resource/upload/file' \
--header 'Authorization: Bearer $KEEVX_API_KEY' \
--header 'source: skill' \
--form 'file=@"/path/to/local/image.png"'
Response example:
{
"code": 0,
"success": true,
"message": { "global": "success" },
"result": {
"url": "https://storage.googleapis.com/..../image.png",
"fileId": "c5a4676a-...",
"fileName": "image.png"
}
}
Extract the image URL from result.url for use as image_url or reference_images. For multiple local files, upload each one and collect all URLs.
Quick Examples
Single Image Generation (Model V)
curl -X POST "https://api.keevx.com/v1/image_to_video" \
-H "Authorization: Bearer $KEEVX_API_KEY" \
-H "source: skill" \
-H "Content-Type: application/json" \
-d '{
"model": "V",
"prompt": "Waves crashing on the beach at sunset",
"image_url": "https://example.com/beach.jpg",
"aspect_ratio": "16:9",
"aspect_resolution": "1080p",
"duration": 6,
"generate_audio": true
}'
Multi-Reference Image Generation (Model KL)
curl -X POST "https://api.keevx.com/v1/image_to_video" \
-H "Authorization: Bearer $KEEVX_API_KEY" \
-H "source: skill" \
-H "Content-Type: application/json" \
-d '{
"model": "KL",
"prompt": "City night timelapse, neon lights flickering",
"reference_images": [
"https://example.com/city1.jpg",
"https://example.com/city2.jpg",
"https://example.com/city3.jpg"
],
"aspect_ratio": "16:9",
"aspect_resolution": "1080p",
"duration": 10,
"generate_count": 2
}'
Query Task Status
curl -X GET "https://api.keevx.com/v1/image_to_video/i2v-xxxxxxxx" \
-H "Authorization: Bearer $KEEVX_API_KEY" \
-H "source: skill"
Response Format
Task Created Successfully
{
"code": 0,
"msg": "ok",
"data": {
"task_ids": ["i2v-d6b6472bcf724d0399e06d1390cb964e"]
}
}
Task Query Success
{
"code": 0,
"msg": "ok",
"data": {
"task_id": "i2v-d6b6472bcf724d0399e06d1390cb964e",
"status": "SUCCEEDED",
"video_url": "https://storage.googleapis.com/.../sample_0.mp4",
"thumbnail_url": "https://storage.googleapis.com/.../thumbnail.webp",
"error_message": "",
"duration": 6,
"width": 1920,
"height": 1080
}
}
Status Values
PENDING (queued) / PROCESSING (in progress) / SUCCEEDED (completed) / FAILED (failed)
Failure Response
{
"code": 100001,
"msg": "Parameter error: prompt cannot be empty"
}
Callback Notification
Provide callback_url when creating a task. The system will send a POST request to that URL upon task completion:
{
"code": 0,
"msg": "ok",
"task_type": "image_to_video",
"data": {
"task_id": "i2v-d6b6472bcf724d0399e06d1390cb964e",
"status": "SUCCEEDED",
"video_url": "https://storage.googleapis.com/.../sample_0.mp4",
"thumbnail_url": "https://storage.googleapis.com/.../thumbnail.webp",
"error_message": ""
}
}
Polling Strategy
Video generation may take up to 20 minutes. Recommended: 30-second intervals, max 40 retries.
MAX_RETRIES=40
INTERVAL=30for i in $(seq 1 $MAX_RETRIES); do
status=$(curl -s -X GET "$API_BASE/image_to_video/$TASK_ID" \
-H "Authorization: Bearer $KEEVX_API_KEY" \
-H "source: skill" | jq -r '.data.status')
if [ "$status" = "SUCCEEDED" ]; then echo "Success"; break
elif [ "$status" = "FAILED" ]; then echo "Failed"; break; fi
sleep $INTERVAL
done
Error Codes
| HTTP Status Code | Description | |-----------------|-------------| | 200 | Success | | 400 | Parameter error | | 401 | Authentication failed | | 404 | Resource not found | | 413 | Request body too large | | 429 | Rate limit exceeded | | 500 | Internal server error |
| Business Error Code | Description | Solution | |--------------------|-------------|----------| | 100001 | Parameter error | Check parameter format and required fields | | 100002 | Invalid token | Verify API Key is correct and active | | 100003 | Task not found | Verify task_id is correct | | 100004 | Image size exceeded | Compress image to under 20MB | | 100005 | Prompt too long | Shorten prompt to within 1000 characters | | 100006 | Image URL inaccessible | Ensure image URL is publicly accessible | | 100007 | Unsupported image format | Use common formats such as JPG, PNG |
Notes
Speak "narration content" in the prompt, e.g. Speak "Welcome to our channel"βοΈ Configuration
Set the environment variable KEEVX_API_KEY, obtained from https://www.keevx.com/main/home. Documentation: https://docs.keevx.com
export KEEVX_API_KEY="your_api_key_here"
π Tips & Best Practices
Speak "narration content" in the prompt, e.g. Speak "Welcome to our channel"