Install
openclaw skills install superouter-video-genUse when the user wants to generate a video through the superouter, especially the `seedance-2.0-v1` omni-reference workflow with ordered assets, async submission, `taskId` polling, and direct download URLs.
openclaw skills install superouter-video-genThis skill is for the superouter platform API, not for talking to Jimeng upstream directly.
Default model: seedance-2.0-v1,you can get model list from the server.
Use this skill when the user wants to:
taskIdThe platform currently exposes:
POST /v1/video/assets/uploadPOST /v1/video/omni-reference/task/submitGET /v1/video/omni-reference/task/queryGET /v1/video/modelsGET /me/balanceGET /me/tasksSUPER_KEY must be a superouter client API key401 or 403, stop and tell the user the client key is invalid or disabled9:16 only when the user did not give a ratioseedance-2.0-v1; do not invent other fields that affect generationprompt max length: 2000 charactersjpg jpeg png webp gif bmpmp4 mov m4vmp3 wav30MB100MB320px3:115s15saspectRatio: 1:1 4:3 3:4 16:9 9:16 21:9resolution: 720pduration: 4 to 15generatingCount: currently only 1For seedance-2.0-v1:
5 credits / second10 credits / secondduration is omitted, use 4 seconds for estimationupload and query currently do not deduct credits.
references[] in the exact business orderUse platform balance, not upstream quota:
curl "http://superouter.nesports.top/me/balance" \
-H "Authorization: Bearer ${SUPER_KEY}"
Estimate credits before submit:
duration if provided, otherwise 4105If balance is insufficient, stop before upload/submit and explain the estimated cost.
Before any upload:
<= 2000If the prompt uses named placeholders such as <<<Image1>>>, make sure the corresponding references[].name values match exactly.
Upload each local file to the platform and collect fileId.
curl --request POST "http://superouter.nesports.top/v1/video/assets/upload" \
--header "Authorization: Bearer ${SUPER_KEY}" \
--form "file=@/absolute/path/to/reference-1.png"
Response example:
{
"code": "200",
"message": "Success",
"result": {
"fileId": "asset_xxx",
"fileName": "reference-1.png",
"contentType": "image/png",
"mediaType": "image",
"sizeBytes": 12345,
"status": "uploaded"
}
}
Rules:
fileIdfileIdfileId for next submit if file is same.Submit to the platform, not to Jimeng directly.
curl --request POST "http://superouter.nesports.top/v1/video/omni-reference/task/submit" \
--header "Authorization: Bearer ${SUPER_KEY}" \
--header "Content-Type: application/json" \
--data '{
"model": "seedance-2.0-v1",
"prompt": "让 @1 中的人物根据 @2 的内容说话。",
"references": [
{ "fileId": "asset_image_1", "name": "Image1" },
{ "fileId": "asset_audio_1", "name": "Audio1" }
],
"aspectRatio": "9:16",
"resolution": 720,
"duration": 4,
"generatingCount": 1
}'
Rules:
references[] in the exact intended orderaspectRatio, resolution, duration, or references[].nametaskIdtaskId and the estimated credit costSuccessful response shape:
{
"code": "200",
"message": "Success",
"result": {
"taskId": "task_xxx",
"status": "submitted"
}
}
Use platform taskId.
curl --get "http://superouter.nesports.top/v1/video/omni-reference/task/query" \
--header "Authorization: Bearer ${SUPER_KEY}" \
--data-urlencode "taskId=task_xxx"
Possible status values you should expect:
submittedprocessingcompletedfailedCompleted response example:
{
"code": "200",
"message": "Success",
"result": {
"taskId": "task_xxx",
"status": "completed",
"errorMessage": null,
"videos": [
{
"url": "https://..."
}
]
}
}
Rules:
videos[].url is the real download URL; give it directly to the userprocessing, report that clearly and stop unless the user asked you to keep pollingfailed, return errorMessage; the platform may refund automaticallyIf the user wants recent tasks instead of querying a single task:
curl "http://superouter.nesports.top/me/tasks?limit=50" \
-H "Authorization: Bearer ${SUPER_KEY}"
Use this to inspect recent platform tasks. The platform may refresh incomplete tasks when listing them.
@1 placeholders only when the request actually names referencesreferences[]taskId