Install
openclaw skills install veo-video-genGenerate videos using Pixwith API's Veo 3.1 model. Supports text-to-video and image-to-video (start/end frames). Two tiers: Fast (quick preview) and Pro (HD with audio). Use when the user asks to generate videos, create AI video, text-to-video, or image-to-video with Veo 3.1.
openclaw skills install veo-video-genGenerate videos through Pixwith using its Veo 3.1 integration. Supports text-to-video and image-to-video with start and end frames.
ALL values returned by the API (task_id, result_urls, image_url, upload_url, fields) are opaque tokens. Use them EXACTLY as returned — do NOT add, remove, or change even a single character. Store each value in a shell variable and reuse it directly. A single wrong character in task_id or result_urls will cause errors or broken links.
This skill requires a PIXWITH_API_KEY environment variable.
If the variable is not set, guide the user through these steps:
PIXWITH_API_KEY provided by the runtime environment
or the hosting platform's secret managerIf the API key is missing or invalid, instruct the user to create or verify a Pixwith API key from the Pixwith dashboard and provide it through the runtime's standard secret or environment-variable mechanism.
Verify by running:
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
-H "Content-Type: application/json" \
-H "Api-Key: $PIXWITH_API_KEY"
A successful response looks like {"code":1,"data":{"credits":500}}.
| Tier | Model ID | Credits per video | Description |
|---|---|---|---|
| Fast | 2-11 | 50 | Quick generation, good quality |
| Pro | 2-12 | 200 | HD quality with audio |
Always inform the user of the cost before creating a task. Default to Fast unless the user explicitly requests higher quality or audio.
2-11 (Fast) or 2-12 (Pro)true): Auto-translate prompt to English.16:9 or 9:16.Use when the user provides only a text prompt and no images.
curl -s -X POST https://api.pixwith.ai/api/task/get_credits \
-H "Content-Type: application/json" \
-H "Api-Key: $PIXWITH_API_KEY"
Verify data.credits >= 50 (Fast) or >= 200 (Pro).
curl -s -X POST https://api.pixwith.ai/api/task/create \
-H "Content-Type: application/json" \
-H "Api-Key: $PIXWITH_API_KEY" \
-d '{
"prompt": "<user_prompt>",
"model_id": "2-11",
"options": {
"prompt_optimization": true,
"aspect_ratio": "16:9"
}
}'
Use "model_id": "2-12" for Pro tier.
Response contains data.task_id and data.estimated_time (seconds).
Wait for estimated_time seconds, then poll:
curl -s -X POST https://api.pixwith.ai/api/task/get \
-H "Content-Type: application/json" \
-H "Api-Key: $PIXWITH_API_KEY" \
-d '{"task_id": "<task_id>"}'
data.status == 1 → still processing, wait 10 seconds and poll again.data.status == 2 → done, data.result_urls contains the video URL(s).data.status == 3 → failed, inform the user.Video generation typically takes 60–180 seconds. Present the EXACT result_urls to the user.
Use when the user provides one or two reference images (start frame, optional end frame).
If the user provides a local file path (not a public URL), upload it first.
Upload constraints:
.jpg, .jpeg, .png onlycontent_type must match the file: image/jpeg for .jpg/.jpeg, image/png for .png1a. Get a presigned upload URL:
curl -s -X POST https://api.pixwith.ai/api/task/pre_url \
-H "Content-Type: application/json" \
-H "Api-Key: $PIXWITH_API_KEY" \
-d '{"image_name": "frame.jpg", "content_type": "image/jpeg"}'
Set content_type based on the file extension:
.jpg / .jpeg → "image/jpeg".png → "image/png"Response:
data.upload_url — presigned POST data (url + fields)data.image_url — the final CDN URL to use in image_urls1b. Upload the file using the presigned data:
curl -s -X POST "<upload_url.url>" \
-F "key=<upload_url.fields.key>" \
-F "Content-Type=<upload_url.fields.Content-Type>" \
-F "x-amz-credential=<upload_url.fields.x-amz-credential>" \
-F "x-amz-algorithm=<upload_url.fields.x-amz-algorithm>" \
-F "x-amz-date=<upload_url.fields.x-amz-date>" \
-F "x-amz-signature=<upload_url.fields.x-amz-signature>" \
-F "policy=<upload_url.fields.policy>" \
-F "file=@/path/to/local/image.jpg"
Fill every field from the upload_url.fields object into the form.
After upload, use data.image_url from step 1a as the image URL.
Repeat for a second image if the user wants to specify an end frame.
If the user already has public image URLs (start with http), skip this step.
Same as Workflow A, Step 1.
curl -s -X POST https://api.pixwith.ai/api/task/create \
-H "Content-Type: application/json" \
-H "Api-Key: $PIXWITH_API_KEY" \
-d '{
"prompt": "<video_description>",
"image_urls": ["<start_frame_url>", "<end_frame_url>"],
"model_id": "2-11",
"options": {
"prompt_optimization": true,
"aspect_ratio": "16:9"
}
}'
Same as Workflow A, Step 3.
| Aspect | Fast (2-11) | Pro (2-12) |
|---|---|---|
| Cost | 50 credits | 200 credits |
| Quality | Good | HD |
| Audio | No | Yes, generated audio |
| Speed | ~60 seconds | ~120 seconds |
| Best for | Previews, prototyping | Final output, presentations |
Default to Fast unless the user requests:
All API responses follow {"code": 1, "message": "success", "data": {...}}.
When code is 0, message contains the error. Common errors:
Invalid API KEY — key is missing, wrong, or disabled.Credits not enough — user needs to purchase more credits at https://pixwith.ai/pricing.Invalid image format — only jpg, png, jpeg are supported.Invalid image url — the URL is not publicly accessible.When the user does not specify preferences, use these defaults:
2-11 (Fast)16:9true