Install
openclaw skills install nanophoto-veo-3-1Generate videos with the NanoPhoto.AI Veo 3.1 API. Use when: (1) User wants Veo 3.1 text-to-video generation, (2) User wants Veo 3.1 generation from referenc...
openclaw skills install nanophoto-veo-3-1Generate videos through the NanoPhoto.AI Veo 3.1 API.
NANOPHOTO_API_KEY before using the skill.Preferred OpenClaw setup:
NANOPHOTO_API_KEYEquivalent config shape:
{
"skills": {
"entries": {
"veo-3-1": {
"enabled": true,
"env": {
"NANOPHOTO_API_KEY": "your_api_key_here"
}
}
}
}
}
Other valid ways to provide the key:
export NANOPHOTO_API_KEY="your_api_key_here"NANOPHOTO_API_KEY~/.openclaw/openclaw.json at skills.entries.veo-3-1.env.NANOPHOTO_API_KEYCredential declaration summary:
NANOPHOTO_API_KEY--api-key → NANOPHOTO_API_KEY environment variable → ~/.openclaw/openclaw.json skill envshots array.id, prompt, generationType, and aspectRatio.imageUrls only when the generation type requires them.resolution.
720p by default.1080p or 4k only for single-shot jobs.submit --follow.completed or failed.videoUrl values and timing information when available.TEXT_2_VIDEO
imageUrlsFIRST_AND_LAST_FRAMES_2_VIDEO
imageUrlsREFERENCE_2_VIDEO
imageUrlsUse the single bundled script with subcommands.
python3 scripts/veo_3_1.py submit \
--shots-json '[{"id":"shot-1","prompt":"A golden retriever running on a beach at sunset, cinematic lighting","generationType":"TEXT_2_VIDEO","aspectRatio":"16:9"}]' \
--resolution 720p
python3 scripts/veo_3_1.py submit \
--shots-json '[{"id":"shot-1","prompt":"The character comes alive, walking through a magical forest","generationType":"REFERENCE_2_VIDEO","aspectRatio":"16:9","imageUrls":["https://static.nanophoto.ai/demo/nano-banana-pro.webp"]}]' \
--resolution 720p \
--follow
python3 scripts/veo_3_1.py status \
--task-ids-json '[{"shotId":"shot-1","taskId":"task_abc123"}]' \
--resolution 720p
The bundled script resolves credentials in this order: --api-key, then NANOPHOTO_API_KEY from the environment, then ~/.openclaw/openclaw.json at skills.entries.veo-3-1.env.NANOPHOTO_API_KEY.
Subcommands:
submit: submit a generation tasksubmit --follow: submit and keep polling in the same processstatus: check an existing Veo generationCross-platform note:
python3 on macOS/Linux.python on Windows unless python3 is available.curl.--json-only when another script/tool needs raw JSON output.--poll-interval to override the default 8-second polling interval.curl -X POST "https://nanophoto.ai/api/veo-3/generate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $NANOPHOTO_API_KEY" \
--data-raw '{
"shots": [
{
"id": "shot-1",
"prompt": "A golden retriever running on a beach at sunset, cinematic lighting",
"generationType": "TEXT_2_VIDEO",
"aspectRatio": "16:9"
}
],
"resolution": "720p"
}'
curl -X POST "https://nanophoto.ai/api/veo-3/check-status" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $NANOPHOTO_API_KEY" \
--data-raw '{
"taskIds": [
{"shotId": "shot-1", "taskId": "task_abc123"}
],
"resolution": "720p"
}'
| errorCode | Cause | Action |
|---|---|---|
LOGIN_REQUIRED | Invalid or missing API key | Verify key at https://nanophoto.ai/settings/apikeys |
API_KEY_RATE_LIMIT_EXCEEDED | Rate limit exceeded | Wait and retry |
INSUFFICIENT_CREDITS | Not enough credits | Top up credits |
SHOTS_REQUIRED | Missing shots array | Build a valid shots payload |
PROMPT_REQUIRED | Missing prompt in a shot | Add prompts to every shot |
INVALID_IMAGE_COUNT | Wrong image count for generation type | Fix imageUrls for that shot type |
IMAGE_URLS_REQUIRED | API needs public image URLs | Do not send local files or base64 |
GENERATION_FAILED | Server-side generation error | Retry or simplify the shot prompts |
TASK_IDS_REQUIRED | Missing task IDs | Pass valid {shotId, taskId} pairs |
TASK_NOT_FOUND | Task not found or not owned by caller | Re-submit or verify ownership |
INTERNAL_ERROR | Server-side failure | Retry later |
scripts/veo_3_1.py: single entry point for submit, status, and optional in-process pollingreferences/api.md: condensed API reference, shot rules, and error behavior