Skill flagged — suspicious patterns detected

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

Seedance Video Generation BytePlus

v1.0.1

Generate AI videos using BytePlus Seedance API (International). Use when the user wants to: (1) generate videos from text prompts, (2) generate videos from images (first frame, first+last frame, reference images), or (3) query/manage video generation tasks. Supports Seedance 1.5 Pro (with audio & draft mode), 1.0 Pro, 1.0 Pro Fast, and 1.0 Lite models.

0· 1.1k·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 jackycser/seedance-video-generation-byteplus.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Seedance Video Generation BytePlus" (jackycser/seedance-video-generation-byteplus) from ClawHub.
Skill page: https://clawhub.ai/jackycser/seedance-video-generation-byteplus
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-generation-byteplus

ClawHub CLI

Package manager switcher

npx clawhub@latest install seedance-video-generation-byteplus
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The name/description and the included Python CLI line up: the code posts generation tasks to the BytePlus Ark API and handles polling and downloads. Requiring an API key for BytePlus (ARK_API_KEY) is appropriate for the stated purpose. However, registry metadata claims no required environment variables while both SKILL.md and the Python code explicitly require ARK_API_KEY — that mismatch is unexpected.
Instruction Scope
SKILL.md and the CLI focus on creating/listing/querying BytePlus generation tasks, converting local images to base64, polling, and downloading results — all within the stated purpose. Additional documentation (how_to_send_video_via_feishu_app.md) shows a workflow that reads local generated video files and instructs using an external `message` tool to upload them to Feishu, which involves reading local workspace files and calling Feishu APIs. That Feishu workflow is optional but present in the bundle and introduces extra IO and external network endpoints beyond BytePlus.
Install Mechanism
No install spec or remote downloads; this is an instruction+source bundle. The code is included in the skill package (seedance_byteplus.py) and would run locally when invoked. No third-party packages are pulled automatically by an installer.
!
Credentials
The runtime requires ARK_API_KEY (BytePlus) according to SKILL.md and the code (get_api_key checks ARK_API_KEY), but the registry metadata lists no required env variables — this is an inconsistency and a documentation/manifest mismatch. The included Feishu guide further references Feishu app credentials (app_id/app_secret or app_access_token) and OpenClaw Feishu settings for uploading generated videos; those credentials are not declared anywhere in the skill manifest either. The number and type of credentials referenced (ARK_API_KEY plus optional Feishu tokens) are plausible for the workflows, but the manifest should declare them explicitly so users know what secrets the skill expects.
Persistence & Privilege
The skill is not always-enabled and is user-invocable. It does not request persistent system-wide privileges or try to modify other skills. It reads/writes files only in user-specified download paths (e.g., workspace or Desktop) and does network calls to the documented BytePlus endpoints.
What to consider before installing
This package mostly does what it claims (calls BytePlus/Seedance to create and poll video generation tasks), but pay attention to the following before installing: - Manifest mismatch: The code and SKILL.md require ARK_API_KEY, but the skill registry metadata lists no required environment variables. Treat ARK_API_KEY as required and ensure you only provide a BytePlus key with appropriate, limited permissions and billing awareness. - Optional Feishu flow: The bundle contains a guide to upload generated videos to Feishu that reads local files and uses Feishu app credentials (app_id / app_secret / app_access_token) stored in OpenClaw settings; those credentials are not declared in the manifest. If you plan to use the Feishu integration, verify the message tool and Feishu app settings separately and understand that files under your workspace will be uploaded to Feishu/CDN. - Local file access: The CLI converts local images to base64 and downloads generated videos to user-specified paths (e.g., ~/.claude/skills or workspace). Make sure sensitive images/videos are not placed in those locations if you don’t want them uploaded. - Network calls & billing: The tool makes outbound HTTP requests to the BytePlus Ark API (BASE_URL = https://ark.ap-southeast.bytepluses.com). Generating videos may incur cost — confirm your BytePlus account/billing and rate limits. - Source review: The Python code is included; if you will run it, consider inspecting the file yourself or running it in an isolated environment. There are no pre-scan injection flags, but the manifest inconsistency (undeclared env vars) lowers trust until corrected. If you want higher assurance, ask the skill author or registry maintainer to (1) update the skill manifest to declare ARK_API_KEY as required, (2) explicitly document optional Feishu credentials (or move the Feishu guide to a separate integration package), and (3) provide an official homepage/source URL so you can verify origin and updates.

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

latestvk971ft3j498bdj59frptkyetcd811q4j
1.1kdownloads
0stars
2versions
Updated 4h ago
v1.0.1
MIT-0

Seedance Video Generation (BytePlus International)

Generate AI videos using ByteDance Seedance models via the BytePlus Ark API (International version).

Prerequisites

The user must set the ARK_API_KEY environment variable with a BytePlus API Key. You can set it by running:

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

Get your API Key from the BytePlus API Key Management page.

Base URL: https://ark.ap-southeast.bytepluses.com/api/v3

Supported Models

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

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

Execution (Recommended: Python CLI Tool)

A Python CLI tool is provided at ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py for robust execution with proper error handling, automatic polling, 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-byteplus/seedance_byteplus.py create --prompt "A kitten yawning at the camera" --wait --download ~/Desktop

# Image-to-video from local file
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "The person slowly turns and smiles" --image /path/to/photo.jpg --wait --download ~/Desktop

# Image-to-video from URL
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "The landscape slowly zooms in" --image "https://example.com/image.jpg" --wait --download ~/Desktop

# First + last frame
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "A flower blooming from bud to full bloom" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop

# Reference images (Lite I2V only)
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "[Image 1] person is dancing" --ref-images ref1.jpg ref2.jpg --model seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop

# Custom parameters
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "City night scene time-lapse" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop

# Draft mode (cheaper preview, Seedance 1.5 Pro only)
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "Waves crashing on the beach" --draft true --wait --download ~/Desktop

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

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

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

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

# Delete/cancel task
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "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 [Image 1], [Image 2] in prompt to reference specific images.

TASK_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "seedance-1-0-lite-i2v-250219",
    "content": [
      {
        "type": "text",
        "text": "A boy from [Image 1] and a corgi from [Image 2], sitting on the lawn"
      },
      {
        "type": "image_url",
        "image_url": { "url": "REF_IMAGE_URL_1" },
        "role": "reference_image"
      },
      {
        "type": "image_url",
        "image_url": { "url": "REF_IMAGE_URL_2" },
        "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.ap-southeast.bytepluses.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
modelstringseedance-1-5-pro-251215Model ID to use
ratiostring16:9 (t2v) / adaptive (i2v)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.ap-southeast.bytepluses.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.ap-southeast.bytepluses.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.ap-southeast.bytepluses.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.ap-southeast.bytepluses.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. running and cancelled tasks cannot be deleted.

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.ap-southeast.bytepluses.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 only)

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

# Step 1: Create draft (forces 480p)
DRAFT_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -d '{
    "model": "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 (Seedance 1.5 Pro also supports HEIC, HEIF)
  • Aspect ratio (width/height): between 0.4 and 2.5
  • Shorter side must be > 300 pixels, longer side must be < 6000 pixels
  • Max file size: 30 MB

Resolution and Aspect Ratio Pixel Values

ResolutionRatioSeedance 1.0 Series (W x H)Seedance 1.5 Pro (W x H)
480p16:9864x480864x496
480p1:1640x640640x640
480p9:16480x864496x864
720p16:91248x7041280x720
720p1:1960x960960x960
720p9:16704x1248720x1280
1080p16:91920x10881920x1080
1080p1:11440x14401440x1440
1080p9:161088x19201080x1920

Sending Videos via Feishu App (OpenClaw)

See 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 (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...