Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Seedance Video Creation

v1.0.0

Generate AI videos using ByteDance Seedance. Use when the user wants to: (1) generate videos from text prompts, (2) generate videos from images (first frame,...

0· 100·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for asikochen/seedance-video-creation.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Seedance Video Creation" (asikochen/seedance-video-creation) from ClawHub.
Skill page: https://clawhub.ai/asikochen/seedance-video-creation
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install seedance-video-creation

ClawHub CLI

Package manager switcher

npx clawhub@latest install seedance-video-creation
Security Scan
VirusTotalVirusTotal
Pending
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The name/description (Seedance video generation) matches the included code and instructions: the Python CLI talks to the Ark API to create/query/download video tasks. However the registry metadata claims no required env vars/credentials while the SKILL.md and seedance.py require ARK_API_KEY. Also supplemental docs reference Feishu app credentials for sending files — those credentials are not declared in the skill metadata. These mismatches are unexpected.
Instruction Scope
SKILL.md and seedance.py perform expected actions for this purpose: reading local image files (base64 conversion), calling the Ark API, polling task status, and downloading video files. The included how_to_send_video_via_feishu_app.md documents reading local video files and using an external 'message' tool that uploads to Feishu (which requires Feishu app tokens and filesystem access). The instructions do not read arbitrary system files or other credentials beyond what is documented, but they do assume local file read/write and network access to external APIs.
Install Mechanism
This is an instruction-only skill with an included Python CLI file; there is no external install script or third‑party download URL. The code will run locally (seedance.py) when invoked. No unusual install mechanism or remote archive extraction is present.
!
Credentials
The runtime requires ARK_API_KEY (seedance.py will exit if it's not set) but the registry metadata lists no required environment variables — an explicit inconsistency. The Feishu integration doc describes needing Feishu app_access_token / app_id/app_secret stored in OpenClaw config, but those credentials are not declared by the skill. This mismatch increases the risk of surprising credential use or missing disclosure.
Persistence & Privilege
The skill is not always-enabled and does not request elevated or persistent system privileges. It does not modify other skills' configurations. It reads/writes user-specified file paths when downloading results (normal for a file-generation tool).
What to consider before installing
Before installing or running this skill: - Expect to provide an ARK_API_KEY environment variable; verify this requirement in the registry metadata or ask the publisher to update metadata to include it. Do not supply keys you do not trust. - Inspect the included seedance.py yourself (it is shipped with the skill) — it runs locally and makes HTTP requests to https://ark.cn-beijing.volces.com; confirm there are no additional hidden endpoints or suspicious behavior. - The helpful Feishu guide shows how to upload generated videos via a 'message' tool that needs Feishu app credentials and reads local files. Those Feishu credentials are not declared by the skill — verify how your OpenClaw instance manages Feishu tokens and whether you consent to using them. - Run the tool in a restricted environment (non-root user, sandbox/container) if you are unsure, and test with non-sensitive API keys or limited-scope keys. - Ask the publisher to resolve metadata inconsistencies (declare ARK_API_KEY in requires.env, correct ownerId/slug if needed) before trusting wider use. If you cannot verify the origin or correct metadata, treat the skill as potentially risky and do not run it with production credentials.

Like a lobster shell, security has layers — review code before you run it.

latestvk97762bcasb94t717ynza5dqt983epsv
100downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

Seedance Video Generation

Generate AI videos using ByteDance Seedance models via the Volcengine Ark API.

Prerequisites

The user must set the ARK_API_KEY environment variable. You can set it by running:

export ARK_API_KEY="your-api-key-here"

Base URL: https://ark.cn-beijing.volces.com/api/v3

Supported Models

ModelModel IDCapabilities
Seedance 1.5 Prodoubao-seedance-1-5-pro-251215Text-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft mode
Seedance 1.0 Prodoubao-seedance-1-0-pro-250428Text-to-video, Image-to-video (first frame, first+last frame)
Seedance 1.0 Pro Fastdoubao-seedance-1-0-pro-fast-250528Text-to-video, Image-to-video (first frame only)
Seedance 1.0 Lite T2Vdoubao-seedance-1-0-lite-t2v-250219Text-to-video only
Seedance 1.0 Lite I2Vdoubao-seedance-1-0-lite-i2v-250219Image-to-video (first frame, first+last frame, reference images 1-4)

Default model: doubao-seedance-1-5-pro-251215 (latest, supports audio)

Execution (Recommended: Python CLI Tool)

A Python CLI tool is provided at ~/.claude/skills/seedance-video/seedance.py for robust execution with proper error handling, automatic retries, and local image base64 conversion. Prefer using this tool over raw curl commands.

Quick Examples with Python CLI

# Text-to-video (create + wait + download)
python3 ~/.claude/skills/seedance-video/seedance.py create --prompt "小猫对着镜头打哈欠" --wait --download ~/Desktop

# Image-to-video from local file
python3 ~/.claude/skills/seedance-video/seedance.py create --prompt "人物缓缓转头微笑" --image /path/to/photo.jpg --wait --download ~/Desktop

# Image-to-video from URL
python3 ~/.claude/skills/seedance-video/seedance.py create --prompt "风景画面缓缓推进" --image "https://example.com/image.jpg" --wait --download ~/Desktop

# First + last frame
python3 ~/.claude/skills/seedance-video/seedance.py create --prompt "花朵从含苞到盛开" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop

# Reference images (Lite I2V)
python3 ~/.claude/skills/seedance-video/seedance.py create --prompt "[图1]的人物在跳舞" --ref-images ref1.jpg ref2.jpg --model doubao-seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop

# Custom parameters
python3 ~/.claude/skills/seedance-video/seedance.py create --prompt "城市夜景延时摄影" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop

# Draft mode (cheaper preview)
python3 ~/.claude/skills/seedance-video/seedance.py create --prompt "海浪拍打沙滩" --draft true --wait --download ~/Desktop

# Generate final video from draft
python3 ~/.claude/skills/seedance-video/seedance.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop

# Query task status
python3 ~/.claude/skills/seedance-video/seedance.py status <TASK_ID>

# Wait for an existing task
python3 ~/.claude/skills/seedance-video/seedance.py wait <TASK_ID> --download ~/Desktop

# List tasks
python3 ~/.claude/skills/seedance-video/seedance.py list --status succeeded

# Delete/cancel task
python3 ~/.claude/skills/seedance-video/seedance.py delete <TASK_ID>

Alternative: Raw curl Commands

Step 1: Create Video Generation Task

Determine the generation mode based on user input, then call the API.

Mode A: Text-to-Video

TASK_RESULT=$(curl -s -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-1-5-pro-251215",
    "content": [
      {
        "type": "text",
        "text": "YOUR_PROMPT_HERE"
      }
    ],
    "ratio": "16:9",
    "duration": 5,
    "resolution": "720p",
    "generate_audio": true
  }')

TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"

Mode B: Image-to-Video (First Frame)

The user provides one image as the first frame. The image can be a URL or local file path (convert to base64).

With image URL:

TASK_RESULT=$(curl -s -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-1-5-pro-251215",
    "content": [
      {
        "type": "text",
        "text": "YOUR_PROMPT_HERE"
      },
      {
        "type": "image_url",
        "image_url": { "url": "IMAGE_URL_HERE" },
        "role": "first_frame"
      }
    ],
    "ratio": "adaptive",
    "duration": 5,
    "resolution": "720p",
    "generate_audio": true
  }')

TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"

With local image file (convert to base64):

IMG_PATH="/path/to/image.png"
IMG_EXT="${IMG_PATH##*.}"
IMG_EXT_LOWER=$(echo "$IMG_EXT" | tr '[:upper:]' '[:lower:]')
IMG_BASE64=$(base64 < "$IMG_PATH" | tr -d '\n')
IMG_DATA_URL="data:image/${IMG_EXT_LOWER};base64,${IMG_BASE64}"

TASK_RESULT=$(curl -s -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-1-5-pro-251215",
    "content": [
      {
        "type": "text",
        "text": "YOUR_PROMPT_HERE"
      },
      {
        "type": "image_url",
        "image_url": { "url": "'"$IMG_DATA_URL"'" },
        "role": "first_frame"
      }
    ],
    "ratio": "adaptive",
    "duration": 5,
    "resolution": "720p",
    "generate_audio": true
  }')

TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"

Mode C: Image-to-Video (First + Last Frame)

Requires two images. Supported by: Seedance 1.5 Pro, 1.0 Pro, 1.0 Lite I2V.

TASK_RESULT=$(curl -s -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-1-5-pro-251215",
    "content": [
      {
        "type": "text",
        "text": "YOUR_PROMPT_HERE"
      },
      {
        "type": "image_url",
        "image_url": { "url": "FIRST_FRAME_IMAGE_URL" },
        "role": "first_frame"
      },
      {
        "type": "image_url",
        "image_url": { "url": "LAST_FRAME_IMAGE_URL" },
        "role": "last_frame"
      }
    ],
    "ratio": "adaptive",
    "duration": 5,
    "resolution": "720p",
    "generate_audio": true
  }')

TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"

Mode D: Reference Image-to-Video (Seedance 1.0 Lite I2V only)

Provide 1-4 reference images. Use [图1], [图2] in prompt to reference specific images.

TASK_RESULT=$(curl -s -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-1-0-lite-i2v-250219",
    "content": [
      {
        "type": "text",
        "text": "[图1]的人物在跳舞"
      },
      {
        "type": "image_url",
        "image_url": { "url": "REF_IMAGE_URL_1" },
        "role": "reference_image"
      }
    ],
    "ratio": "16:9",
    "duration": 5,
    "resolution": "720p"
  }')

TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"

Step 2: Poll for Task Completion

Video generation is asynchronous. Poll the task status until it completes.

echo "Waiting for video generation to complete..."
while true; do
  STATUS_RESULT=$(curl -s -X GET "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}" \
    -H "Authorization: Bearer $ARK_API_KEY")

  STATUS=$(echo "$STATUS_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['status'])")

  if [ "$STATUS" = "succeeded" ]; then
    echo "Video generation succeeded!"
    VIDEO_URL=$(echo "$STATUS_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['content']['video_url'])")
    echo "Video URL: $VIDEO_URL"
    break
  elif [ "$STATUS" = "failed" ]; then
    ERROR_MSG=$(echo "$STATUS_RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message','Unknown error'))" 2>/dev/null || echo "Unknown error")
    echo "Video generation failed: $ERROR_MSG"
    break
  elif [ "$STATUS" = "expired" ]; then
    echo "Video generation task expired."
    break
  else
    echo "Status: $STATUS - still processing..."
    sleep 15
  fi
done

Step 3: Download and Open Video

OUTPUT_PATH="$HOME/Desktop/seedance_video_$(date +%Y%m%d_%H%M%S).mp4"
curl -s -o "$OUTPUT_PATH" "$VIDEO_URL"
echo "Video saved to: $OUTPUT_PATH"
open "$OUTPUT_PATH"

Optional Parameters Reference

ParameterTypeDefaultDescription
modelstringdoubao-seedance-1-5-pro-251215Model ID to use
ratiostring16:9 (text2vid) / adaptive (img2vid)Aspect ratio: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
durationinteger5Video duration in seconds (4-12 for 1.5 Pro, 2-12 for others). Set -1 for auto (1.5 Pro only)
resolutionstring720pResolution: 480p, 720p, 1080p
seedinteger-1Random seed for reproducibility. -1 = random
camera_fixedbooleanfalseFix camera position
watermarkbooleanfalseAdd watermark to video
generate_audiobooleantrueGenerate synchronized audio (Seedance 1.5 Pro only)
draftbooleanfalseGenerate draft/preview video at lower cost (Seedance 1.5 Pro only, forces 480p)
return_last_framebooleanfalseReturn last frame image URL (for chaining consecutive videos)
service_tierstringdefaultdefault (online) or flex (offline, 50% cheaper, slower)
execution_expires_afterinteger172800Task timeout in seconds (3600-259200)

Additional Operations

Query Task Status

curl -s -X GET "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}" \
  -H "Authorization: Bearer $ARK_API_KEY" | python3 -m json.tool

List Tasks

# List all tasks (paginated)
curl -s -X GET "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10" \
  -H "Authorization: Bearer $ARK_API_KEY" | python3 -m json.tool

# Filter by status
curl -s -X GET "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10&filter.status=succeeded" \
  -H "Authorization: Bearer $ARK_API_KEY" | python3 -m json.tool

Cancel or Delete Task

curl -s -X DELETE "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}" \
  -H "Authorization: Bearer $ARK_API_KEY"

Note: queued tasks will be cancelled; succeeded/failed/expired tasks will be deleted from history.

Generate Consecutive Videos (Using Last Frame)

Set return_last_frame: true on the first task, then use the returned last_frame_url as the first frame of the next task.

# Get last frame URL from completed task
LAST_FRAME_URL=$(curl -s -X GET "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}" \
  -H "Authorization: Bearer $ARK_API_KEY" | python3 -c "import sys,json; print(json.load(sys.stdin)['content']['last_frame_url'])")

# Use it as first frame for the next video
# ... (use Mode B with LAST_FRAME_URL as the image URL)

Draft Mode (Seedance 1.5 Pro)

Generate a cheap preview first, then produce the final video if satisfied:

# Step 1: Create draft
DRAFT_RESULT=$(curl -s -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-1-5-pro-251215",
    "content": [
      { "type": "text", "text": "YOUR_PROMPT_HERE" }
    ],
    "draft": true,
    "resolution": "480p"
  }')
DRAFT_TASK_ID=$(echo "$DRAFT_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")

# Step 2: After draft succeeds, generate final video from draft
FINAL_RESULT=$(curl -s -X POST "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "doubao-seedance-1-5-pro-251215",
    "content": [
      {
        "type": "draft_task",
        "draft_task": { "id": "'"$DRAFT_TASK_ID"'" }
      }
    ],
    "resolution": "720p"
  }')

Image Requirements

  • Formats: jpeg, png, webp, bmp, tiff, gif (1.5 Pro also supports heic, heif)
  • Aspect ratio (width/height): between 0.4 and 2.5
  • Dimensions: 300-6000 px per side
  • Max file size: 30 MB

通过飞书发送视频文件(OpenClaw)

详见 how_to_send_video_via_feishu_app.md

Rules

  1. Always check that ARK_API_KEY is set before making API calls: [ -z "$ARK_API_KEY" ] && echo "Error: ARK_API_KEY not set" && exit 1
  2. Default to Seedance 1.5 Pro (doubao-seedance-1-5-pro-251215) unless user requests a specific model.
  3. Default to 720p, 16:9, 5 seconds, with audio for text-to-video.
  4. Default to adaptive ratio for image-to-video (auto-adapts to the input image).
  5. Poll interval: 15 seconds between status checks.
  6. Video URLs expire in 24 hours - always download immediately after generation.
  7. Task history is kept for 7 days only.
  8. For local image files, convert to base64 data URL format before sending.
  9. Always show the user the task ID so they can check status later.
  10. When generation fails, display the error message clearly and suggest possible fixes.

Comments

Loading comments...