Use when the user wants to generate a video through the superouter, especially the `seedance-2.0-v1` omni-reference workflow with ordered assets, async submi...
---
name: superouter-video-gen
description: Use 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.
metadata:
{
"openclaw":
{
"requires": { "bins": ["curl"], "env": ["SUPER_KEY"] }
}
}
---
# superouter Video Gen
## Overview
This 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:
- upload ordered reference assets
- submit an async video generation task
- query status with platform `taskId`
- download the final video from the real URL returned by the platform
The platform currently exposes:
- `POST /v1/video/assets/upload`
- `POST /v1/video/omni-reference/task/submit`
- `GET /v1/video/omni-reference/task/query`
- `GET /v1/video/models`
- `GET /me/balance`
- `GET /me/tasks`
## Preconditions
- `SUPER_KEY` must be a **superouter client API key**
- If the platform returns `401` or `403`, stop and tell the user the client key is invalid or disabled
- Default ratio for short drama generation is `9:16` only when the user did not give a ratio
- Default model is `seedance-2.0-v1`; do not invent other fields that affect generation
## Current Platform Rules
### Prompt
- `prompt` max length: `2000` characters
### File types
- Images: `jpg` `jpeg` `png` `webp` `gif` `bmp`
- Video: `mp4` `mov` `m4v`
- Audio: `mp3` `wav`
### File limits
- Single file max: `30MB`
- Total referenced asset size per task max: `100MB`
- Image shortest side min: `320px`
- Image long/short side ratio max: `3:1`
- Video duration max: `15s`
- Audio duration max: `15s`
### Seedance submit limits
- `aspectRatio`: `1:1` `4:3` `3:4` `16:9` `9:16` `21:9`
- `resolution`: `720p`
- `duration`: `4` to `15`
- `generatingCount`: currently only `1`
### Pricing
For `seedance-2.0-v1`:
- no video reference: `5 credits / second`
- any video reference present: `10 credits / second`
- if `duration` is omitted, use `4` seconds for estimation
`upload` and `query` currently do not deduct credits.
## Asset selection principles
- Only upload the people or scene references that actually matter for the current shot
- Keep the asset list as small and ordered as possible
- If clothing continuity is critical, add clothing references explicitly instead of assuming them
- Video generation is sensitive to reference order; keep `references[]` in the exact business order
## Workflow
### 1. Check balance before submit
Use platform balance, not upstream quota:
```bash
curl "http://superouter.nesports.top/me/balance" \
-H "Authorization: Bearer ${SUPER_KEY}"
```
Estimate credits before submit:
- use `duration` if provided, otherwise `4`
- if any reference asset is video, multiply by `10`
- otherwise multiply by `5`
If balance is insufficient, stop before upload/submit and explain the estimated cost.
### 2. Validate local inputs
Before any upload:
- confirm every referenced local file exists
- confirm prompt length is `<= 2000`
- do not invent file order
- keep placeholder names aligned with reference order
If the prompt uses named placeholders such as `<<<Image1>>>`, make sure the corresponding `references[].name` values match exactly.
### 3. Upload assets first
Upload each local file to the platform and collect `fileId`.
```bash
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:
```json
{
"code": "200",
"message": "Success",
"result": {
"fileId": "asset_xxx",
"fileName": "reference-1.png",
"contentType": "image/png",
"mediaType": "image",
"sizeBytes": 12345,
"status": "uploaded"
}
}
```
Rules:
- always save the returned `fileId`
- same-client duplicate upload may return an existing `fileId`
- do not assume one upload call accepts multiple files unless the user specifically wants to script multiple sequential uploads
- you can save `fileId` for next submit if file is same.
### 4. Submit the task
Submit to the platform, not to Jimeng directly.
```bash
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:
- keep `references[]` in the exact intended order
- first reference is the first logical asset, second reference is the second logical asset, and so on
- do not invent `aspectRatio`, `resolution`, `duration`, or `references[].name`
- default to async submit behavior; the platform returns `taskId`
- after success, report `taskId` and the estimated credit cost
Successful response shape:
```json
{
"code": "200",
"message": "Success",
"result": {
"taskId": "task_xxx",
"status": "submitted"
}
}
```
### 5. Query task status
Use platform `taskId`.
```bash
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:
- `submitted`
- `processing`
- `completed`
- `failed`
Completed response example:
```json
{
"code": "200",
"message": "Success",
"result": {
"taskId": "task_xxx",
"status": "completed",
"errorMessage": null,
"videos": [
{
"url": "https://..."
}
]
}
}
```
Rules:
- the returned `videos[].url` is the real download URL; give it directly to the user
- do not proxy-download unless the user explicitly asks you to save the file locally
- if status is `processing`, report that clearly and stop unless the user asked you to keep polling
- if status is `failed`, return `errorMessage`; the platform may refund automatically
### 6. Optional task list
If the user wants recent tasks instead of querying a single task:
```bash
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.
## Prompt / ordering rules
- Keep the reference list in the same order the user intends the model to read it
- Use `@1` placeholders only when the request actually names references
- If the user gives unnamed files only, keep order and do not invent semantic names
- If the user asks for a shot prompt rewrite, keep the asset references consistent with the final `references[]`
## Fixed rules
- Use the superouter platform API only
- Default only the model; ask for missing generation inputs that materially affect output
- Do not claim success before you have a platform `taskId`
- Do not wait for completion by default after submit
- If the service is unreachable, tell the user to check whether the superouter API is running
don't have the plugin yet? install it then click "run inline in claude" again.
added explicit decision points for auth failures, balance checks, file validation, and service unavailability; separated procedure into six numbered steps with clear inputs/outputs; documented edge cases including timeouts, 401/403 responses, and failed task status; clarified output contract with specific data formats and file locations; added outcome signal describing how users confirm success.
use this skill when a user wants to generate video through the superouter platform api. the skill handles the full workflow: balance checks, local file validation, asset upload, async task submission, status polling, and video download. this is the platform api only, not direct upstream access. default model is seedance-2.0-v1. use this skill specifically when the user provides reference assets (images, video, audio) that need ordered submission and async task tracking.
authentication
SUPER_KEY environment variable: superouter client api key (string, required). must be a valid bearer token for the platform. if missing or invalid, the skill stops immediately and reports auth failure.user inputs
jpg, jpeg, png, webp, gif, bmp), video (mp4, mov, m4v), or audio (mp3, wav). each file max 30mb. total per task max 100mb. image shortest side min 320px, long/short ratio max 3:1. video and audio duration max 15s each.9:16 for short drama): one of 1:1, 4:3, 3:4, 16:9, 9:16, 21:94): integer from 4 to 15seedance-2.0-v1): string, do not inventexternal connection
http://superouter.nesports.top. endpoints: POST /v1/video/assets/upload, POST /v1/video/omni-reference/task/submit, GET /v1/video/omni-reference/task/query, GET /v1/video/models, GET /me/balance, GET /me/tasks. network timeouts and service unavailability are possible.step 1: check platform balance
call GET /me/balance with bearer token to retrieve current credit balance.
input: SUPER_KEY, authorization header
output: balance object with current credits (integer)
if response is 401 or 403, stop and report auth failure. user must provide valid SUPER_KEY.
estimate required credits: if any reference is video, multiply duration by 10; otherwise multiply by 5. if duration is not provided, use 4 for estimation. if estimated cost exceeds balance, stop and report cost and balance to the user. do not proceed to upload or submit.
step 2: validate local inputs
confirm each local file path in the reference list exists and is readable.
input: file paths from user output: validated file list with sizes
for each file:
confirm prompt length is at most 2000 characters.
if prompt contains named placeholders like <<<Image1>>>, confirm that references[].name values in the next step match exactly.
if any validation fails, stop and report the error before uploading.
step 3: upload assets
for each local file in order, call POST /v1/video/assets/upload with multipart form data.
input: file path, bearer token output: fileId (string), mediaType (string)
do one upload per api call. after success, extract and save the returned fileId and confirm status is uploaded. if the same file is uploaded twice by the same client, the platform may return an existing fileId; use the returned fileId in the next step regardless.
if upload fails (e.g. file too large, unsupported type, network timeout), stop and report error. do not proceed to submit.
step 4: submit task
call POST /v1/video/omni-reference/task/submit with json body containing model, prompt, references array (in the exact user order), aspect ratio, resolution (always 720), duration, and generating count (always 1).
input: model (string, default seedance-2.0-v1), prompt (string, max 2000 chars), references array (objects with fileId and name), aspect ratio (string, one of allowed values), duration (integer 4-15, default 4), bearer token
output: taskId (string), status (string, value submitted)
do not invent aspect ratio, duration, or reference order. keep references in the exact order the user provided or intended. do not add extra fields.
if response code is 200 and status is submitted, extract taskId and report it to the user along with the estimated credit cost (from step 1 calculation).
if response is 401 or 403, report auth failure and stop.
if response is 400 or validation error, report the error details to the user; do not retry without user input.
if network timeout or service unavailability, report that the superouter api is unreachable.
step 5: query task status (optional, if user requests or asks for polling)
call GET /v1/video/omni-reference/task/query with taskId as a url parameter.
input: taskId (string), bearer token
output: status (string, one of submitted, processing, completed, failed), videos array (if completed), errorMessage (if failed)
if status is submitted or processing, report that to the user and stop polling unless the user explicitly asked to keep polling.
if status is completed, extract the first videos[0].url and report it to the user as the download link. do not proxy-download or save locally unless the user explicitly asks.
if status is failed, extract and report errorMessage. the platform may refund credits automatically.
if response is 401 or 403, report auth failure.
if network timeout, report that the query failed and suggest trying again later.
step 6: list recent tasks (optional, if user requests task history)
call GET /me/tasks?limit=50 with bearer token.
input: bearer token, optional limit parameter (default 50) output: array of task objects with taskId, status, and metadata
parse and report recent tasks to the user. the platform may refresh incomplete task statuses during listing.
if balance is insufficient: stop before any upload or submit. report the estimated cost and current balance. ask the user to top up or reduce generation parameters (e.g. shorter duration, fewer references).
if file validation fails: stop immediately. report which file failed validation and why (missing, wrong type, size limit, dimension limit). do not proceed to upload.
if upload fails: stop and report the upload error. do not attempt to submit with missing fileIds.
if auth response is 401 or 403: stop at any step. report that the SUPER_KEY is invalid or the account is disabled. do not retry the same key.
if prompt contains named placeholders: confirm before submit that reference names match exactly. if they do not match, stop and ask the user to align names or remove placeholders.
if the user provides only unnamed reference files: keep the order and do not invent names. use fileId references only, or use generic @1, @2 if prompt requires it.
if task status is processing and user did not ask to poll: report that the task is still running and provide the taskId. do not wait by default.
if query returns failed status: report the error message. do not retry submit automatically; ask the user if they want to try again.
if superouter api is unreachable: report that the service is down or network is unavailable. do not retry multiple times; suggest checking whether the superouter api is running.
if the user asks for a different model: confirm that the model exists by calling GET /v1/video/models first. if it exists and is not the default, use it. do not invent models.
on successful submission:
on successful completion (after polling):
on balance check:
on error:
file locations:
the user knows the skill worked when:
credits: skill structure and platform rules by superouter platform team. documentation enriched for implexa standards.