opencode Skill

muapi-seedance-2

Expert Cinema Director skill for Seedance 2.0 (ByteDance) — high-fidelity video generation across Chinese, Global, and VIP tiers. Supports text-to-video, image-to-video, first-last-frame, omni reference, character training, omni-reference training, video editing, and watermark re

LLM Mart · 0 points · 10 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download samuraigpt-generative-media-skills-library_motion_seedance-2-74df8cb.zip · 18 KB
Part of samuraigpt/generative-media-skills — 72 skills

Install

skills CLI npx skills add https://github.com/SamurAIGPT/Generative-Media-Skills/tree/main/library/motion/seedance-2
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install samuraigpt-generative-media-skills@llmmart
Git git clone https://github.com/SamurAIGPT/Generative-Media-Skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole samuraigpt/generative-media-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

🎬 Seedance 2.0 Cinema Expert

The definitive skill for "Director-Level" AI video orchestration. Seedance 2.0 is not a descriptive model; it is an instructional model. It responds best to technical cinematography, physics directives, and precise camera grammar.

Core Competencies

  1. Text-to-Video (t2v): Generate cinematic video from a Director Brief — Chinese, Global, or VIP tier.
  2. Image-to-Video (i2v): Animate 1–9 reference images — Chinese, Global (smart mode), or VIP tier.
  3. Video Extension (extend): Seamlessly continue an existing Seedance 2.0 video (Chinese tier).
  4. First & Last Frame (first-last): Interpolate a fluid video between a start image and end image (Global/VIP).
  5. Omni Reference (omni): Full multimodal reference with images + audio + character refs (all tiers).
  6. Omni Reference Training (omni-train): Train a custom persistent character for identity-consistent generation.
  7. Character Sheet (character): Build a reusable character from 1–3 images (Chinese tier).
  8. Video Edit (video-edit): Edit an existing video with a prompt + optional reference images (Chinese tier).
  9. Watermark Removal (watermark-remove): Strip Seedance 2.0 watermarks (basic or Pro).

🏷️ Tiers

Tier Flag Censorship Aspect Ratios Duration Quality param
Chinese (default) --tier chinese Low 16:9, 9:16, 4:3, 3:4 5 / 10 / 15 s Yes (basic/high)
Global --tier global Standard + 21:9, 1:1 Any 4–15 s No
VIP --tier vip Low + 21:9, 1:1 Any 4–15 s No

Add --fast to any Global or VIP call to use the fast-queue variant (lower latency, same quality).


📥 Input Limits

Input Type Chinese i2v/omni Global/VIP i2v/omni Formats Max Size
Images ≤ 9 ≤ 9 jpeg, png, webp 30 MB each
Videos ≤ 3 (omni only) Not supported mp4, mov 50 MB each
Audio ≤ 3 ≤ 3 mp3, wav 15 MB each
First-Last — 1–2 images jpeg, png, webp 30 MB each
Video Edit 1 video + ≤ 9 imgs — mp4 ≤ 10 MB / 15s —

Output: 4–15 seconds, auto-generated sound, 480p–720p.


⚠️ Restrictions

  • No realistic human faces in uploaded images/videos (except character/omni-train modes).
  • --mode extend requires a request_id from a prior seedance-v2.0-t2v or seedance-v2.0-i2v job.
  • --mode first-last requires --tier global or --tier vip.
  • Global/VIP omni does not support video references (images + audio only).
  • --quality applies to Chinese tier only.

🔗 Core Syntax: The @ Reference System

Assign explicit roles to each uploaded asset. Tags differ by mode.

Chinese Tier (i2v, omni)

@image1  @image2  ...  @image9    (images_list order)
@video1  @video2  @video3         (video_files order)
@audio1  @audio2  @audio3         (audio_files order)

Global/VIP Omni (omni-reference-no-video / vip-omni-reference)

@image1  @image2  ...  @image9    (images_list order)
@audio1  @audio2  @audio3         (audio_files order)

Character References (all tiers)

@character:<request_id>            — from seedance-2-character or completed t2v/i2v job
@omni-character:<character_id>     — from seedance-2-omni-reference-train output

Role Assignment Table

Purpose Example Syntax
First frame @Image1 as the first frame
Last frame @Image2 as the last frame
Character appearance @Image1's character as the subject
Scene / background scene references @Image3
Camera movement reference @Video1's camera movement
Action / motion reference @Video1's action choreography
Visual effects completely reference @Video1's effects and transitions
Rhythm / tempo video rhythm references @Video1
Voice / tone narration voice references @Video1
Background music BGM references @Audio1
Sound effects sound effects reference @Video3's audio
Outfit / clothing wearing the outfit from @Image2
Product appearance product details reference @Image3

Multi-Reference Combination

@Image1's character as the subject, reference @Video1's camera movement
and action choreography, BGM references @Audio1, scene references @Image2

🏗️ Technical Specification: The Director Brief

Structure prompts using this six-component hierarchy. Order matters — composition first, texture and micro-motion last:

Component Instruction Type Example
Scene Environment + Lighting "A rain-soaked cyberpunk street, magenta neon reflections on wet asphalt."
Subject Identity + Detail "A woman in a black trenchcoat, determined focus, cinematic skin textures."
Action Fluid Interaction "Walking forward through the crowd, coat billowing slightly in the wind."
Camera Movement + Lens + Speed "Medium tracking shot, 35mm lens, slow dolly backward over 6s. Subtle handheld jitter."
Audio Music + SFX + Ambience "Low ambient hum, distant traffic, single piano note at 5s. No dialogue."
Pacing/Style Timing + Mood + Grade "Cinematic epic, warm color grade, shallow DOF. Slow build — single action only, no scene cuts."

Seedance 2.0 generates audio natively. Always include an Audio directive — even one sentence. Without it the model generates random ambient sound that may not match your scene.

Time-Segmented Prompts (Recommended for 10s+ videos)

Break prompts into timed segments for precise control:

0–3s: [opening scene, camera move, establishing action]
3–6s: [mid-section development, subject in motion]
6–10s: [climax or key action beat]
10–15s: [resolution, brand/product hold, text/tagline fade in]

Single-beat rule: Each segment should contain one action. 4–7s = one beat. 10–15s = 3–4 beats maximum. Overloading a segment with multiple narrative changes degrades output quality.

Negative Prompting

Seedance 2.0 supports appending negative guidance directly in the prompt. Use plain language at the end:

[your director brief above]
Avoid: camera shake, jump cuts, lens distortion, overexposure, watermarks, text overlays.

Common negative additions:

  • Avoid: abrupt cuts, scene changes, multiple locations. (for single-take shots)
  • Avoid: human faces, realistic people. (for product-only content)
  • Avoid: fast motion, blur, unstable framing. (for smooth product reveals)

🎥 Camera Language Reference

Basic Movements

Term Description
Push in / Slow push Camera moves toward subject
Pull back / Pull away Camera moves away from subject
Pan left/right Camera rotates horizontally
Tilt up/down Camera rotates vertically
Track / Follow shot Camera follows subject movement
Orbit / Revolve Camera circles around subject
One-take / Oner Continuous shot with no cuts

Advanced Techniques

Term Description
Hitchcock zoom (dolly zoom) Push in + zoom out — creates vertigo effect
Fisheye lens Ultra-wide distorted lens
Low angle / High angle Camera below/above subject
Bird's eye / Overhead Top-down view
First-person POV (FPV) Immersive subjective camera from character/object's eyes — GoPro-style wide angle, forward motion, no cuts
Drone flythrough Cinematic aerial descent — gimbal-stabilized, sweeping lateral arc, DJI Inspire aesthetic
Architectural flythrough Ground-level continuous dolly through connected spaces — one-take, practical lighting
Whip pan Very fast horizontal pan with motion blur
Crane shot Vertical movement like a crane arm

Shot Sizes

Term Description
Extreme close-up Eyes, mouth, or small detail only
Close-up Face fills frame
Medium close-up Head and shoulders
Medium shot Waist up
Full shot Entire body
Wide / Establishing shot Full environment

🧠 Prompt Optimization Protocol

The Agent MUST transform user intent into a technical "Director Brief" before execution.

  1. Technical Grammar: Use camera terms: Dolly In/Out, Crane Shot, Whip Pan, Tracking Shot, Anamorphic Lens, Shallow Depth of Field, High-Speed Dive, Orbital Arc.
  2. Physics Directives: Use "caustic patterns," "volumetric rays," or "subsurface scattering" instead of "good lighting."
  3. Timecode Notation: For multi-beat scenes, use [00:00-00:05s] format to specify timing.
  4. Tag References: If files provided, use: "Replicate the camera movement of @video1 while maintaining the visual style of @image1." (lowercase, 1-based index)
  5. ORDER MATTERS: Tokens at the start define composition; tokens at the end define texture and micro-motion.
  6. Multi-Image i2v: Provide up to 9 reference images. The model blends aspects (style, identity, environment) across all inputs.
  7. Audio is mandatory: Seedance 2.0 generates audio natively. Always include an Audio line — music genre/tone, key SFX, ambient texture. Silent direction = random audio.
  8. Single-beat discipline: Each timed segment = one action. Cramming two narrative beats into 4s degrades physics and motion consistency.

🎭 Capability-Specific Patterns

1. Character Consistency

The man in @Image1 walks tiredly down the hallway, slowing his steps,
finally stopping at his front door. Close-up on his face — he takes a
deep breath, replaces the weariness with a relaxed expression.
Maintain high character consistency, zero facial flicker, persistent clothing details.

2. Camera Movement Replication

Reference @Image1's male character. He is in @Image2's elevator.
Completely reference @Video1's camera movements and facial expressions.
Hitchcock zoom during the fear moment, then orbit shots of the interior.
Elevator doors open, follow shot walking out.

3. Video Extension (Forward)

Extend @Video1 by 10 seconds.
1–5s: Light and shadow slowly slide across table through venetian blinds.
6–10s: A coffee bean drifts down. Camera pushes in toward it until screen goes black.
English text gradually appears — "Lucky Coffee", "Breakfast", "AM 7:00-10:00".

4. Video Extension (Reverse / Prepend)

Extend backward 10s. In warm afternoon light, the camera starts from
the corner with awning fluttering in the breeze, slowly tilting down
to flowers peeking out at the wall base, building anticipation for the main scene.

5. Video Editing (Modify Existing)

Subvert @Video1's plot — the character's expression shifts from warmth to
cold determination. The action is decisive, without hesitation.
Maintain all other visual elements (scene, lighting, timing).

6. Music Beat-Matching

bash scripts/generate-seedance.sh \
  --mode i2v \
  --file img1.jpg --file img2.jpg --file img3.jpg \
  --video-file reference_edit.mp4 \
  --audio-file track.mp3 \
  --subject "@Image1 @Image2 @Image3 — match the keyframe positions and rhythm of @Video1 for beat-synced cuts. BGM references @Audio1. More dynamic movement, dreamlike visual style." \
  --duration 15 --quality high

7. Dialogue / Voice Acting

In the "Cat & Dog Roast Show" — emotionally expressive comedy segment:
Cat host (licking paw, rolling eyes): "Who understands my suffering?"
Dog host (head tilted, tail wagging): "You're one to talk? You sleep 18 hours a day..."
Sound: lively studio ambience, audience laughter, punchy transitions.

8. One-Take / Long Take

@Image1 @Image2 @Image3 — one-take tracking shot following a runner
from the street up stairs, through a corridor, onto a rooftop,
finally overlooking the city. No cuts throughout.

9. E-commerce / Product Showcase

bash scripts/generate-seedance.sh \
  --mode i2v \
  --file product.jpg \
  --subject "Deconstruct the product. Static camera. Hamburger suspended mid-air, rotating slowly. Ingredients separate and reassemble. Cheese continues to melt and drip. Ultimate food aesthetics." \
  --intent "product" \
  --aspect "9:16" \
  --duration 15 --quality high

10. Science / Educational Visualization

bash scripts/generate-seedance.sh \
  --subject "15-second health educational clip. 0–5s: Transparent blue human upper body, camera pushes into a clear artery, blood flows smoothly. 5–10s: Sugar and fat particles enter bloodstream, lipid deposits form on vessel walls. 10–15s: Vessel narrows, before/after comparison. 4K medical CGI, semi-transparent visualization." \
  --intent "educational" \
  --duration 15 --quality high

11. FPV First-Person Shot

bash scripts/generate-seedance.sh \
  --subject "Immersive first-person POV shot. Camera glides at eye level through a narrow mountain trail,
trees rushing past in peripheral blur, rocky terrain below. Slight natural stabilization with wide-angle lens.
Continuous forward motion, no cuts throughout. Trail opens into a clearing — mountain peak visible ahead.
Sound: wind, footsteps on gravel, distant birds. Natural ambient audio, no music." \
  --intent "fpv" \
  --aspect "9:16" --duration 10 --quality high

12. Cinematic Drone Flythrough

bash scripts/generate-seedance.sh \
  --subject "Cinematic aerial drone shot. Camera starts at 150m altitude above a coastal city at golden hour.
Smooth gimbal-stabilized descent along a sweeping lateral arc, dropping toward a rooftop terrace.
Long shadows cast across building tops, warm light on ocean surface. High-speed dive closes in
to product on the terrace — final frame settles into a medium close-up.
Sound: gentle wind, distant city hum, soft cinematic score building to resolve." \
  --intent "drone" \
  --aspect "16:9" --duration 10 --tier global --view

🎨 Prompt Templates

Cinematic Film

[SCENE] Rain-soaked cyberpunk alley, neon signs reflected on wet cobblestones.
[SUBJECT] A lone figure in a weathered trench coat, face obscured by a wide-brim hat.
[ACTION] Walking slowly, each step splashing neon color into the puddles.
[CAMERA] Low-angle tracking shot, anamorphic lens, slow dolly in. Rack focus to face.
[STYLE] Denis Villeneuve aesthetic, high contrast, desaturated blues and magentas. 24fps.

Product Ad (15s)

Reference @Video1's editing style. Replace @Video1's product with @Image1 as hero.
0–3s: Product enters with dynamic rotation, close-up on surface texture and logo.
4–8s: Multiple angle transitions — front, side, back — with highlight scanning light.
9–12s: Product in lifestyle context showing usage.
13–15s: Hero shot with brand tagline, background music builds to resolution.
Sound: Reference @Video1's BGM. Add product interaction sound effects.

Short Drama (15s)

Scene (0–5s): Close-up on character's reddened eyes, finger pointing accusingly.
Dialogue 1: "What exactly are you trying to take from me?"
Scene (6–10s): Other character trembles, holding up evidence, steps forward.
Dialogue 2: "I'm not deceiving you! This is what he entrusted to me!"
Scene (11–15s): Evidence revealed, first character freezes — anger shifts to shock.
Sound: Urgent piano + static interference, sobbing, muffled voice blending in.
Duration: Precise 15 seconds, every frame tight, no filler.

Dance / Beat-Sync (13s)

Have the character in @Image1 replicate the dance moves and beat-synced
music from @Video1. Generate a 13-second video. Movements should be
smooth with no stuttering or freezing.

Scenery Montage (15s)

@Image1 @Image2 @Image3 @Image4 @Image5 @Image6 — landscape scene images.
Reference @Video1's visual rhythm, inter-scene transitions, visual style,
and music tempo for beat-synced editing.

Advertising / Product Motion

[SCENE] Minimalist white studio, single product on a rotating pedestal.
[ACTION] Subtle 360° rotation, product details catching specular highlights.
[CAMERA] Tight medium shot, macro lens pass over surface texture, slow orbit.
[STYLE] Commercial grade, perfect exposure, zero background distraction.

Action / Physics

[SCENE] Desert canyon at sunrise, sandy terrain, long shadows.
[SUBJECT] High-performance sports car accelerating through a turn.
[ACTION] Rear wheels spinning with dust plume, chassis flexing under g-force.
[CAMERA] Low hero angle dolly tracking alongside, then whip pan to lead car.
[STYLE] Hollywood racing film, warm golden grade, motion blur on wheels. 24fps.

Character Consistency (Martial Arts)

[SUBJECT] Same fighter throughout: young woman, white gi, black belt, determined expression.
[ACTION] Fluid kata sequence — rising block, stepping side kick, spinning back fist.
[CAMERA] Full-body wide shot, then cut to close-up of fist impact in slow motion.
[STYLE] Maintain identical lighting, clothing, and facial features in every frame. Zero flicker.

🎚️ Style & Quality Modifiers

Visual Style

  • Cinematic quality, film grain, shallow depth of field
  • 2.35:1 widescreen, 24fps
  • Ink wash painting style / Anime style / Photorealistic
  • High saturation neon colors, cool-warm contrast
  • 4K medical CGI, semi-transparent visualization

Mood / Atmosphere

  • Tense and suspenseful / Warm and healing / Epic and grand
  • Comedy with exaggerated expressions
  • Documentary tone, restrained narration

Audio Direction

  • Background music: grand and majestic
  • Sound effects: footsteps, crowd noise, car sounds
  • Voice tone reference @Video1
  • Beat-synced transitions matching music rhythm

❌ Common Mistakes to Avoid

  1. Vague references: Don't say "reference @Video1" — specify WHAT to reference (camera? action? effects? rhythm?)
  2. Conflicting instructions: Don't ask for "static camera" and "orbit shot" in the same segment.
  3. Overloading: Don't pack too many scenes into 4–5 seconds — keep it physically plausible.
  4. Missing @ assignments: If you upload 5 images, make sure each one is referenced with a clear purpose.
  5. Ignoring audio: Sound design dramatically improves output — always include audio direction.
  6. Forgetting duration: Match prompt complexity to the selected generation length.
  7. Real faces: Don't upload real human photos — the system will block them.
  8. Keyword soup: DO NOT use "8k, masterpiece, trending." Use technical descriptions instead.
  9. Discontinuous action: Avoid "The man runs and then he stops." Use fluid transitional language.
  10. Missing audio direction: Seedance 2.0 generates audio natively — always specify music tone, SFX, or ambience. Skipping it produces random sound.
  11. Narrative overload per segment: Each timed segment should contain one action beat. Multiple scene changes in 4s produce degraded physics and motion artifacts.
  12. FPV without continuous motion: FPV requires a motion-rich environment to work — a static room with FPV intent will not trigger the immersive effect. Pair FPV with corridors, streets, natural terrain, or product flyovers.
  13. Drone without a destination: Drone shots need a resolve point — specify what the camera descends toward or arrives at. "Drone shot" alone produces aimless floating.

🚀 Protocol: All Modes

Mode 1: Text-to-Video (t2v)

# Chinese tier (default) — epic reveal
bash scripts/generate-seedance.sh \
  --subject "hidden Andes temple, mist through the canopy" \
  --intent epic --aspect "16:9" --duration 10 --quality high --view

# Global tier — 21:9 cinematic, 12s
bash scripts/generate-seedance.sh \
  --tier global \
  --subject "neon cyberpunk alley, rain-slicked streets" \
  --intent tense --aspect "21:9" --duration 12 --view

# VIP fast — square social format
bash scripts/generate-seedance.sh \
  --tier vip --fast \
  --subject "product rotating on a pedestal, specular highlights" \
  --intent product --aspect "1:1" --duration 6

Mode 2: Image-to-Video (i2v)

# Chinese tier — animate with video/audio refs
bash scripts/generate-seedance.sh --mode i2v \
  --file character.jpg --video-file ref_motion.mp4 --audio-file bgm.mp3 \
  --subject "@image1's character walks forward, @video1's camera movement, BGM references @audio1" \
  --quality high --view

# Global tier — 1 image = first frame anchor
bash scripts/generate-seedance.sh --mode i2v --tier global \
  --file hero.jpg \
  --subject "hero strides forward, coat billowing in slow motion" \
  --duration 8 --view

# VIP fast — 3 images, omni ref mode (2-9 images switches to omni)
bash scripts/generate-seedance.sh --mode i2v --tier vip --fast \
  --file char.jpg --file env.jpg --file style.jpg \
  --subject "@image1 character walks through @image2's environment in @image3's style" \
  --duration 10

Mode 3: Extend Video (Chinese tier)

# Extend naturally
bash scripts/generate-seedance.sh --mode extend \
  --request-id "abc-123-def-456" --duration 10

# Extend with directional prompt
bash scripts/generate-seedance.sh --mode extend \
  --request-id "abc-123-def-456" \
  --subject "camera continues pulling back, revealing the vast city below" \
  --intent reveal --duration 10 --quality high --view

Mode 4: First & Last Frame (Global/VIP)

# One image = first frame anchor
bash scripts/generate-seedance.sh --mode first-last --tier global \
  --file opening_scene.jpg \
  --subject "smooth cinematic push into the scene" --duration 6 --view

# Two images = interpolate between first and last frame
bash scripts/generate-seedance.sh --mode first-last --tier vip --fast \
  --file start.jpg --file end.jpg \
  --subject "dramatic reveal transition between the two frames" --duration 8 --view

Mode 5: Omni Reference (omni)

# Chinese tier — images + video + audio refs
bash scripts/generate-seedance.sh --mode omni --tier chinese \
  --file character.jpg --video-file ref_edit.mp4 --audio-file track.mp3 \
  --subject "@image1's character performs moves from @video1, BGM references @audio1" \
  --duration 15 --quality high --view

# Global tier — images + audio, no video refs
bash scripts/generate-seedance.sh --mode omni --tier global \
  --file portrait.jpg --audio-file bgm.mp3 \
  --subject "@image1 is the main character. Walking through a neon-lit city at night. BGM references @audio1." \
  --aspect "16:9" --duration 8 --view

# VIP tier — with trained omni character
bash scripts/generate-seedance.sh --mode omni --tier vip --fast \
  --subject "@omni-character:char_1775422630065_4vbana walks through a garden at golden hour" \
  --aspect "16:9" --duration 10 --view

# With @character ref (from character mode)
bash scripts/generate-seedance.sh --mode omni --tier global \
  --subject "@character:cab9517f-1818-4910-8d66 walks down a rain-soaked alley, cinematic tracking shot" \
  --duration 8 --view

Mode 6: Train Omni Reference Character (omni-train)

# Train from a single portrait
bash scripts/generate-seedance.sh --mode omni-train \
  --file portrait.jpg \
  --character-name "Alex" \
  --character-desc "A brave explorer with piercing blue eyes"

# Use in omni prompts after training completes:
# @omni-character:<character_id returned>

Mode 7: Character Sheet (character, Chinese tier)

# Build character from 1–3 reference images
bash scripts/generate-seedance.sh --mode character \
  --file ref1.jpg --file ref2.jpg \
  --character-name "Hero" \
  --subject "red leather jacket with black jeans and white sneakers"

# Use the returned request_id in t2v/i2v/omni:
# @character:<request_id>

Mode 8: Video Edit (video-edit, Chinese tier)

# Replace subject in an existing video
bash scripts/generate-seedance.sh --mode video-edit \
  --video-url "https://example.com/input.mp4" \
  --file replacement_character.jpg \
  --subject "Replace the running man with @image1. Preserve exact motion, speed, and camera shake." \
  --quality high --view

# Edit with watermark removal in one step
bash scripts/generate-seedance.sh --mode video-edit \
  --video-file source.mp4 \
  --subject "Subvert the plot — the character's expression shifts from warmth to cold determination." \
  --remove-watermark --view

Mode 9: Watermark Removal (watermark-remove)

# Basic watermark removal
bash scripts/generate-seedance.sh --mode watermark-remove \
  --video-url "https://example.com/seedance_output.mp4" --view

# Pro watermark removal (100MB limit, better quality)
bash scripts/generate-seedance.sh --mode watermark-remove \
  --video-file my_video.mp4 --pro --view

Async Pattern

# Submit and get request_id immediately
RESULT=$(bash scripts/generate-seedance.sh --tier vip --fast --subject "..." --async --json)
REQUEST_ID=$(echo "$RESULT" | jq -r '.request_id')

# Check status later
bash ../../../../core/media/generate-video.sh --result "$REQUEST_ID"

⚙️ Implementation Details

Endpoint Reference

Mode Tier Endpoint
t2v chinese seedance-v2.0-t2v
t2v global seedance-2-text-to-video{-fast}
t2v vip seedance-2-vip-text-to-video{-fast}
i2v chinese seedance-v2.0-i2v
i2v global seedance-2-image-to-video{-fast}
i2v vip seedance-2-vip-image-to-video{-fast}
extend chinese seedance-v2.0-extend
first-last global seedance-2-first-last-frame{-fast}
first-last vip seedance-2-vip-first-last-frame{-fast}
omni chinese seedance-2.0-omni-reference
omni global seedance-2-omni-reference-no-video{-fast}
omni vip seedance-2-vip-omni-reference{-fast}
omni-train any seedance-2-omni-reference-train
character any seedance-2-character
video-edit chinese seedance-v2.0-video-edit
watermark-remove — seedance-2.0-watermark-remover / seedance-2-video-watermark-remover-pro

Parameter Differences by Tier

Parameter Chinese Global VIP
aspect_ratio 16:9, 9:16, 4:3, 3:4 + 21:9, 1:1 + 21:9, 1:1
duration 5 / 10 / 15 (enum) 4–15 (any int) 4–15 (any int)
quality basic / high — (not supported) — (not supported)
video_files (omni) ✅ up to 3 ❌ ❌
audio_files (omni) ✅ up to 3 ✅ up to 3 ✅ up to 3
Fast variant ❌ ✅ (--fast) ✅ (--fast)

This skill acts as a Cinematographic Wrapper that translates creative intent into high-fidelity technical instructions for the muapi core.

Files (generative-media-skills)
  • scripts
    • generate-seedance.sh 32.1 KB
      #!/bin/bash
      # Expert Skill: Seedance 2 Cinema Expert
      # Translates creative intent into 'Director-Level' technical directives for Seedance 2.0.
      #
      # Modes:   t2v | i2v | extend | first-last | omni | omni-train | character | video-edit | watermark-remove
      # Tiers:   chinese (default) | global | vip
      # Options: --fast for fast-queue variants (global/vip only)
      #
      # Requires: bash 3.2+, curl, jq, python3
      
      set -euo pipefail
      
      SUBJECT=""
      INTENT="cinematic"
      ASPECT="16:9"
      DURATION=5
      QUALITY="basic"
      AUDIO_FLAG=""
      VIEW=false
      MODE="t2v"
      TIER="chinese"
      FAST=false
      IMAGE_URLS=()
      IMAGE_FILES=()
      VIDEO_URLS=()
      VIDEO_FILES=()
      AUDIO_URLS=()
      AUDIO_FILES=()
      EXTEND_REQUEST_ID=""
      CHARACTER_NAME=""
      CHARACTER_DESC=""
      REMOVE_WATERMARK=false
      PRO_WATERMARK=false
      ASYNC=false
      JSON_ONLY=false
      MAX_WAIT=600
      POLL_INTERVAL=5
      
      MUAPI_BASE="https://api.muapi.ai/api/v1"
      
      # Load .env if present (suppress errors, disable nounset temporarily)
      if [ -f ".env" ]; then
          set +u; source .env 2>/dev/null || true; set -u
      fi
      
      # ============================================================
      # Argument parsing
      # ============================================================
      while [[ $# -gt 0 ]]; do
          case $1 in
              --mode)             MODE="$2";             shift 2 ;;
              --tier)             TIER="$2";             shift 2 ;;
              --fast)             FAST=true;             shift   ;;
              --subject)          SUBJECT="$2";          shift 2 ;;
              --intent)           INTENT="$2";           shift 2 ;;
              --aspect)           ASPECT="$2";           shift 2 ;;
              --duration)         DURATION="$2";         shift 2 ;;
              --quality)          QUALITY="$2";          shift 2 ;;
              --no-audio)         AUDIO_FLAG="--no-audio"; shift ;;
              --view)             VIEW=true;             shift   ;;
              --image|--image-url) IMAGE_URLS+=("$2");  shift 2 ;;
              --file|--image-file) IMAGE_FILES+=("$2"); shift 2 ;;
              --video-url)        VIDEO_URLS+=("$2");    shift 2 ;;
              --video-file)       VIDEO_FILES+=("$2");   shift 2 ;;
              --audio-url)        AUDIO_URLS+=("$2");    shift 2 ;;
              --audio-file)       AUDIO_FILES+=("$2");   shift 2 ;;
              --request-id)       EXTEND_REQUEST_ID="$2"; shift 2 ;;
              --character-name)   CHARACTER_NAME="$2";   shift 2 ;;
              --character-desc)   CHARACTER_DESC="$2";   shift 2 ;;
              --remove-watermark) REMOVE_WATERMARK=true; shift   ;;
              --pro)              PRO_WATERMARK=true;    shift   ;;
              --async)            ASYNC=true;            shift   ;;
              --json)             JSON_ONLY=true;        shift   ;;
              --help|-h)
                  cat <<'HELP'
      Seedance 2 Cinema Expert
      Usage: bash generate-seedance.sh --mode MODE [options]
      
      MODES
        t2v              Text-to-Video
        i2v              Image-to-Video (1–9 images)
        extend           Extend an existing Seedance 2.0 video (Chinese tier only)
        first-last       First & Last Frame interpolation (Global/VIP; 1–2 images)
        omni             Omni Reference — images + audio + optional @character refs
        omni-train       Train a custom Omni Reference character (one reference image)
        character        Build a character sheet from 1–3 images
        video-edit       Edit a video with prompt + optional reference images (Chinese tier)
        watermark-remove Remove watermark from a Seedance 2.0 video
      
      TIERS  (default: chinese)
        chinese          seedance-v2.0-* endpoints — lower cost, low censorship
        global           seedance-2-* endpoints — 21:9/1:1 aspect ratios, flexible 4–15s duration
        vip              seedance-2-vip-* endpoints — fast queue + low censorship
      
      OPTIONS
        --fast           Use fast-queue variant (global/vip tiers only)
        --subject TEXT   Scene description / prompt (required for most modes)
        --intent TYPE    reveal|tense|epic|narrative|product|educational|comedy|fpv|drone|flythrough (default: cinematic)
        --aspect RATIO   16:9|9:16|4:3|3:4  — global/vip also support: 21:9|1:1  (default: 16:9)
        --duration N     Chinese: 5|10|15 s  — global/vip: any integer 4–15 s  (default: 5)
        --quality Q      basic|high  (Chinese tier only; default: basic)
        --view           Download and open the output file (macOS)
        --async          Return request_id immediately without polling
        --json           Raw JSON output only
      
      INPUTS
        --image URL        Image URL (repeatable, up to 9)
        --file PATH        Local image file — auto-uploaded (repeatable)
        --video-url URL    Reference video URL (repeatable, up to 3; Chinese i2v/omni only)
        --video-file PATH  Local video file — auto-uploaded (repeatable)
        --audio-url URL    Reference audio URL (repeatable, up to 3)
        --audio-file PATH  Local audio file — auto-uploaded (repeatable)
      
      MODE-SPECIFIC OPTIONS
        extend:           --request-id ID          request_id of the original Seedance 2.0 video
        character:        --character-name NAME    optional character label
                          --subject TEXT           optional outfit/costume description
        omni-train:       --character-name NAME    character name for @omni-character ref
                          --character-desc TEXT    optional character description
        video-edit:       --video-url/--video-file  source video (1 max, 10MB, 15s)
                          --remove-watermark         strip watermark from edited output
        watermark-remove: --video-url/--video-file  Seedance 2.0 video URL
                          --pro                      use Pro remover (100MB limit)
      
      EXAMPLES
        # Chinese T2V (default)
        bash generate-seedance.sh --subject "hidden Andes temple at dawn" --intent epic --view
      
        # Global T2V — 21:9, 12s, fast queue
        bash generate-seedance.sh --tier global --fast --subject "neon cyberpunk alley" --aspect "21:9" --duration 12
      
        # VIP I2V
        bash generate-seedance.sh --mode i2v --tier vip --fast --file hero.jpg --subject "hero strides forward"
      
        # First & Last Frame (global)
        bash generate-seedance.sh --mode first-last --tier global --file start.jpg --file end.jpg \
          --subject "smooth cinematic transition"
      
        # Omni Reference (global, with character ref)
        bash generate-seedance.sh --mode omni --tier global --file portrait.jpg \
          --subject "@image1 walks through a neon-lit city at night"
      
        # Train Omni Reference character
        bash generate-seedance.sh --mode omni-train --file portrait.jpg \
          --character-name "Alex" --character-desc "A brave explorer"
      
        # Chinese character sheet
        bash generate-seedance.sh --mode character --file ref1.jpg --file ref2.jpg \
          --character-name "Hero" --subject "red leather jacket"
      
        # Video Edit
        bash generate-seedance.sh --mode video-edit \
          --video-url "https://example.com/input.mp4" --file replacement.jpg \
          --subject "Replace the runner with @image1, preserve exact motion and camera"
      
        # Watermark Remove (Pro)
        bash generate-seedance.sh --mode watermark-remove --video-url "https://example.com/v.mp4" --pro
      HELP
                  exit 0 ;;
              *)
                  echo "Warning: Unknown argument '$1' — skipping." >&2
                  shift ;;
          esac
      done
      
      # ============================================================
      # Validate API key
      # ============================================================
      if [ -z "${MUAPI_KEY:-}" ]; then
          echo "Error: MUAPI_KEY is not set. Export it or add to .env" >&2
          exit 1
      fi
      
      HEADERS=(-H "x-api-key: $MUAPI_KEY" -H "Content-Type: application/json")
      
      # ============================================================
      # Director's Cinematography Grammar
      # ============================================================
      case "$INTENT" in
          reveal)
              MOVEMENT="Slow crane up and tilt down, wide establishing shot."
              LIGHTING="Volumetric god rays, golden hour atmosphere, warm bloom."
              OPTICS="Deep focus, anamorphic widescreen, ultra-high clarity."
              ;;
          tense)
              MOVEMENT="Handheld jittery movement, dutch angle close-up, unstable framing."
              LIGHTING="Low key, harsh shadows, flickering magenta neon, split lighting."
              OPTICS="Shallow depth of field, anamorphic lens flare, slight motion blur."
              ;;
          epic)
              MOVEMENT="Dolly in with circular orbit, low hero angle, sweeping arc."
              LIGHTING="Dramatic rim lighting, high contrast cinematic grade, specular highlights."
              OPTICS="Anamorphic 35mm, sharp focus on subject, chromatic aberration edges."
              ;;
          narrative)
              MOVEMENT="Smooth tracking shot following subject, natural Steadicam motion."
              LIGHTING="Natural soft light, blue hour tones, practical light sources."
              OPTICS="Standard 50mm, realistic bokeh, minimal distortion."
              ;;
          product)
              MOVEMENT="Static camera with slow macro orbit, precision product reveal."
              LIGHTING="Perfect even exposure, specular highlights on product surface."
              OPTICS="Macro lens, zero distortion, commercial grade clarity."
              ;;
          educational)
              MOVEMENT="Slow push in, clinical camera movements, no handheld jitter."
              LIGHTING="Even neutral lighting, high clarity, no dramatic shadows."
              OPTICS="Standard lens, deep focus, semi-transparent CGI visualization."
              ;;
          comedy)
              MOVEMENT="Reactive handheld, punchy cuts, exaggerated zooms."
              LIGHTING="Bright even lighting, warm comedic tone, no harsh shadows."
              OPTICS="Slight wide angle, expressive framing, snappy focus pulls."
              ;;
          fpv)
              MOVEMENT="Immersive first-person POV, continuous forward motion at eye level, slight natural stabilization with GoPro-style wide angle. No cuts throughout."
              LIGHTING="Natural ambient light matching environment, subtle lens flare, peripheral depth-of-field blur."
              OPTICS="Ultra-wide fisheye-adjacent lens, slight barrel distortion, high motion clarity, natural vignette edges."
              ;;
          drone)
              MOVEMENT="Cinematic aerial drone shot, smooth gimbal-stabilized descent from high altitude, sweeping lateral arc resolving into establishing medium shot. DJI Inspire aesthetic."
              LIGHTING="Golden hour atmosphere, long directional shadows across terrain, volumetric haze on horizon."
              OPTICS="Wide-angle aerial lens, deep focus across entire frame, high altitude clarity, natural atmospheric haze."
              ;;
          flythrough)
              MOVEMENT="Continuous ground-level architectural dolly-through, seamless forward movement through connected spaces. One-take no-cut trajectory."
              LIGHTING="Practical interior lighting with natural window light spill, soft even exposure transitions between zones."
              OPTICS="Wide-angle rectilinear lens, deep focus, minimal distortion, smooth exposure transitions."
              ;;
          *)
              MOVEMENT="Smooth cinematic pan, balanced stable framing."
              LIGHTING="Natural studio lighting, balanced highlights and shadows."
              OPTICS="Standard cinematic lens, high-fidelity optics."
              ;;
      esac
      
      # ============================================================
      # Helper: upload a local file — prints CDN URL to stdout, errors to stderr
      # Returns 1 on failure (caller should handle with || exit 1)
      # ============================================================
      upload_file() {
          local FPATH="$1"
          if [ ! -f "$FPATH" ]; then
              echo "Error: File not found: $FPATH" >&2
              return 1
          fi
          [ "$JSON_ONLY" = false ] && echo "Uploading $(basename "$FPATH")..." >&2
          local RESP URL
          RESP=$(curl -s -X POST "${MUAPI_BASE}/upload_file" \
              -H "x-api-key: $MUAPI_KEY" \
              -F "file=@${FPATH}")
          URL=$(echo "$RESP" | jq -r '.url // empty')
          if [ -z "$URL" ]; then
              echo "Error: Upload failed for $(basename "$FPATH"): $(echo "$RESP" | jq -r '.error // .detail // "unknown"')" >&2
              return 1
          fi
          echo "$URL"
      }
      
      # ============================================================
      # Helper: build a JSON array string from positional args
      # Usage: build_json_array "${MY_ARRAY[@]}"   — empty array safe
      # ============================================================
      build_json_array() {
          local JSON="[" i=0 elem
          for elem in "$@"; do
              [ "$i" -gt 0 ] && JSON="${JSON},"
              JSON="${JSON}\"${elem}\""
              i=$(( i + 1 ))
          done
          echo "${JSON}]"
      }
      
      # ============================================================
      # Helper: JSON-encode a string (handles quotes, backslashes, newlines)
      # Usage: echo "text" | json_string
      # ============================================================
      json_string() {
          python3 -c 'import json,sys; print(json.dumps(sys.stdin.read().rstrip()))'
      }
      
      # ============================================================
      # Helper: poll predictions/<id>/result until completed or failed
      # Prints final JSON to stdout; status lines go to stderr.
      # ============================================================
      poll_result() {
          local REQ_ID="$1"
          local ELAPSED=0 LAST_STATUS="" RESULT STATUS URL EXT OUTPUT_DIR TEMP_FILE
      
          while [ "$ELAPSED" -lt "$MAX_WAIT" ]; do
              sleep "$POLL_INTERVAL"
              ELAPSED=$(( ELAPSED + POLL_INTERVAL ))
      
              RESULT=$(curl -s -X GET "${MUAPI_BASE}/predictions/${REQ_ID}/result" \
                  -H "x-api-key: $MUAPI_KEY" \
                  -H "Content-Type: application/json")
      
              STATUS=$(echo "$RESULT" | jq -r '.status // "unknown"')
      
              if [ "$STATUS" != "$LAST_STATUS" ] && [ "$JSON_ONLY" = false ]; then
                  echo "Status: $STATUS (${ELAPSED}s elapsed)" >&2
                  LAST_STATUS="$STATUS"
              fi
      
              if [ "$STATUS" = "completed" ]; then
                  URL=$(echo "$RESULT" | jq -r '.outputs[0] // empty')
                  [ "$JSON_ONLY" = false ] && echo "Done! Output: $URL" >&2
                  if [ "$VIEW" = true ] && [ -n "$URL" ]; then
                      EXT="${URL##*.}"
                      # Detect non-extension fragment (query strings, etc.) → default mp4
                      case "$EXT" in
                          mp4|mov|webm|jpg|jpeg|png|gif|webp) ;;
                          *) EXT="mp4" ;;
                      esac
                      OUTPUT_DIR="$(dirname "$0")/../../../../media_outputs"
                      mkdir -p "$OUTPUT_DIR"
                      TEMP_FILE="$OUTPUT_DIR/muapi_$(date +%s).$EXT"
                      [ "$JSON_ONLY" = false ] && echo "Downloading → $TEMP_FILE" >&2
                      curl -s -o "$TEMP_FILE" "$URL"
                      [[ "$OSTYPE" == "darwin"* ]] && open "$TEMP_FILE"
                  fi
                  echo "$RESULT"
                  return 0
      
              elif [ "$STATUS" = "failed" ]; then
                  echo "Error: Job failed — $(echo "$RESULT" | jq -r '.output.error // .error // "unknown"')" >&2
                  echo "$RESULT"
                  return 1
              fi
          done
      
          echo "Error: Timeout after ${MAX_WAIT}s for request_id=$REQ_ID" >&2
          return 1
      }
      
      # ============================================================
      # Helper: submit JSON payload to endpoint, then poll (or return async)
      # Usage: submit_and_poll ENDPOINT PAYLOAD [LABEL]
      # ============================================================
      submit_and_poll() {
          local ENDPOINT="$1"
          local PAYLOAD="$2"
          local LABEL="${3:-$1}"
          local SUBMIT API_ERROR REQUEST_ID
      
          [ "$JSON_ONLY" = false ] && echo "Submitting to $LABEL..." >&2
      
          SUBMIT=$(curl -s -X POST "${MUAPI_BASE}/${ENDPOINT}" "${HEADERS[@]}" -d "$PAYLOAD")
      
          API_ERROR=$(echo "$SUBMIT" | jq -r '.error // .detail // empty')
          if [ -n "$API_ERROR" ]; then
              echo "Error: $API_ERROR" >&2
              echo "$SUBMIT" >&2
              exit 1
          fi
      
          REQUEST_ID=$(echo "$SUBMIT" | jq -r '.request_id // empty')
          if [ -z "$REQUEST_ID" ]; then
              echo "Error: No request_id returned from $ENDPOINT" >&2
              echo "$SUBMIT" >&2
              exit 1
          fi
      
          [ "$JSON_ONLY" = false ] && echo "Request ID: $REQUEST_ID" >&2
      
          if [ "$ASYNC" = true ]; then
              echo "$SUBMIT"
              exit 0
          fi
      
          [ "$JSON_ONLY" = false ] && echo "Waiting for completion..." >&2
          poll_result "$REQUEST_ID"
      }
      
      # ============================================================
      # MODE: t2v — Text-to-Video
      #
      # Chinese: seedance-v2.0-t2v          (16:9/9:16/4:3/3:4, quality, duration 5|10|15)
      # Global:  seedance-2-text-to-video{-fast}    (+ 21:9/1:1, any 4–15s, no quality)
      # VIP:     seedance-2-vip-text-to-video{-fast}
      # ============================================================
      if [ "$MODE" = "t2v" ]; then
          [ -z "$SUBJECT" ] && { echo "Error: --subject is required for t2v." >&2; exit 1; }
      
          DIRECTOR_PROMPT="[SCENE] $SUBJECT. [LIGHTING] $LIGHTING [ACTION] Fluid continuous motion. [CAMERA] $MOVEMENT [STYLE] $OPTICS High-fidelity production grade, 24fps. Maintain high character consistency, zero flicker."
      
          if [ "$TIER" = "chinese" ]; then
              SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
              CORE_SCRIPT="$SCRIPT_DIR/../../../../core/media/generate-video.sh"
              [ ! -f "$CORE_SCRIPT" ] && { echo "Error: Core script not found at $CORE_SCRIPT" >&2; exit 1; }
      
              VIEW_FLAG="";   [ "$VIEW" = true ]      && VIEW_FLAG="--view"
              ASYNC_FLAG="";  [ "$ASYNC" = true ]     && ASYNC_FLAG="--async"
              JSON_FLAG="";   [ "$JSON_ONLY" = true ] && JSON_FLAG="--json"
      
              # shellcheck disable=SC2086
              bash "$CORE_SCRIPT" \
                  --prompt "$DIRECTOR_PROMPT" \
                  --model "seedance-v2.0-t2v" \
                  --aspect-ratio "$ASPECT" \
                  --duration "$DURATION" \
                  $AUDIO_FLAG $VIEW_FLAG $ASYNC_FLAG $JSON_FLAG
          else
              PROMPT_JSON=$(echo "$DIRECTOR_PROMPT" | json_string)
              [ "$TIER" = "vip" ] && ENDPOINT="seedance-2-vip-text-to-video" || ENDPOINT="seedance-2-text-to-video"
              [ "$FAST" = true ]  && ENDPOINT="${ENDPOINT}-fast"
              PAYLOAD="{\"prompt\": $PROMPT_JSON, \"aspect_ratio\": \"$ASPECT\", \"duration\": $DURATION}"
              submit_and_poll "$ENDPOINT" "$PAYLOAD"
          fi
      
      # ============================================================
      # MODE: i2v — Image-to-Video
      #
      # Chinese: seedance-v2.0-i2v   (images_list + videos_list + audios_list, quality)
      # Global:  seedance-2-image-to-video{-fast}   (1 img=first frame, 2-9=omni ref; no quality)
      # VIP:     seedance-2-vip-image-to-video{-fast}
      # ============================================================
      elif [ "$MODE" = "i2v" ]; then
          for FPATH in "${IMAGE_FILES[@]+"${IMAGE_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; IMAGE_URLS+=("$URL")
          done
          for FPATH in "${VIDEO_FILES[@]+"${VIDEO_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; VIDEO_URLS+=("$URL")
          done
          for FPATH in "${AUDIO_FILES[@]+"${AUDIO_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; AUDIO_URLS+=("$URL")
          done
      
          [ ${#IMAGE_URLS[@]} -eq 0 ] && { echo "Error: At least one --image or --file is required for i2v." >&2; exit 1; }
          [ ${#IMAGE_URLS[@]} -gt 9 ] && { echo "Error: Maximum 9 images allowed." >&2; exit 1; }
      
          if [ -n "$SUBJECT" ]; then
              DIRECTOR_PROMPT="[ACTION] $SUBJECT. [CAMERA] $MOVEMENT [STYLE] $OPTICS Fluid continuous motion. Maintain high character consistency, zero flicker."
          else
              DIRECTOR_PROMPT="[CAMERA] $MOVEMENT [STYLE] $OPTICS Fluid continuous motion. Animate the provided image with cinematic realism."
          fi
          PROMPT_JSON=$(echo "$DIRECTOR_PROMPT" | json_string)
          IMAGES_JSON=$(build_json_array "${IMAGE_URLS[@]}")
      
          if [ "$TIER" = "chinese" ]; then
              [ ${#VIDEO_URLS[@]} -gt 3 ] && { echo "Error: Maximum 3 reference videos allowed." >&2; exit 1; }
              [ ${#AUDIO_URLS[@]} -gt 3 ] && { echo "Error: Maximum 3 reference audio files allowed." >&2; exit 1; }
      
              PAYLOAD="{\"prompt\": $PROMPT_JSON, \"images_list\": $IMAGES_JSON, \"aspect_ratio\": \"$ASPECT\", \"duration\": $DURATION, \"quality\": \"$QUALITY\""
              [ ${#VIDEO_URLS[@]} -gt 0 ] && PAYLOAD="${PAYLOAD}, \"videos_list\": $(build_json_array "${VIDEO_URLS[@]}")"
              [ ${#AUDIO_URLS[@]} -gt 0 ] && PAYLOAD="${PAYLOAD}, \"audios_list\": $(build_json_array "${AUDIO_URLS[@]}")"
              PAYLOAD="${PAYLOAD}}"
              submit_and_poll "seedance-v2.0-i2v" "$PAYLOAD" "seedance-v2.0-i2v (${#IMAGE_URLS[@]} image(s))"
          else
              [ "$TIER" = "vip" ] && ENDPOINT="seedance-2-vip-image-to-video" || ENDPOINT="seedance-2-image-to-video"
              [ "$FAST" = true ]  && ENDPOINT="${ENDPOINT}-fast"
              PAYLOAD="{\"prompt\": $PROMPT_JSON, \"images_list\": $IMAGES_JSON, \"duration\": $DURATION}"
              submit_and_poll "$ENDPOINT" "$PAYLOAD" "$ENDPOINT (${#IMAGE_URLS[@]} image(s))"
          fi
      
      # ============================================================
      # MODE: extend — Extend a Seedance 2.0 video (Chinese tier)
      # Endpoint: seedance-v2.0-extend
      # ============================================================
      elif [ "$MODE" = "extend" ]; then
          [ -z "$EXTEND_REQUEST_ID" ] && { echo "Error: --request-id is required for extend." >&2; exit 1; }
      
          if [ -n "$SUBJECT" ]; then
              EXT_PROMPT="[CONTINUATION] $SUBJECT. [CAMERA] $MOVEMENT [STYLE] $OPTICS Seamless continuation of previous scene."
              PROMPT_JSON=$(echo "$EXT_PROMPT" | json_string)
              PAYLOAD="{\"request_id\": \"$EXTEND_REQUEST_ID\", \"prompt\": $PROMPT_JSON, \"duration\": $DURATION, \"quality\": \"$QUALITY\"}"
          else
              PAYLOAD="{\"request_id\": \"$EXTEND_REQUEST_ID\", \"duration\": $DURATION, \"quality\": \"$QUALITY\"}"
          fi
      
          submit_and_poll "seedance-v2.0-extend" "$PAYLOAD"
      
      # ============================================================
      # MODE: first-last — First & Last Frame interpolation (Global/VIP only)
      #
      # Global: seedance-2-first-last-frame{-fast}    (1 img=anchor, 2 imgs=first+last)
      # VIP:    seedance-2-vip-first-last-frame{-fast}
      # Note:   Aspect ratio is inferred from the reference image.
      # ============================================================
      elif [ "$MODE" = "first-last" ]; then
          [ "$TIER" = "chinese" ] && { echo "Error: --mode first-last requires --tier global or --tier vip." >&2; exit 1; }
      
          for FPATH in "${IMAGE_FILES[@]+"${IMAGE_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; IMAGE_URLS+=("$URL")
          done
      
          [ ${#IMAGE_URLS[@]} -eq 0 ] && { echo "Error: At least 1 --image or --file required for first-last." >&2; exit 1; }
          [ ${#IMAGE_URLS[@]} -gt 2 ] && { echo "Error: first-last accepts 1 (anchor) or 2 (first+last) images." >&2; exit 1; }
      
          IMAGES_JSON=$(build_json_array "${IMAGE_URLS[@]}")
          PROMPT_JSON=$(echo "$SUBJECT" | json_string)
      
          [ "$TIER" = "vip" ] && ENDPOINT="seedance-2-vip-first-last-frame" || ENDPOINT="seedance-2-first-last-frame"
          [ "$FAST" = true ]  && ENDPOINT="${ENDPOINT}-fast"
      
          PAYLOAD="{\"prompt\": $PROMPT_JSON, \"images_list\": $IMAGES_JSON, \"duration\": $DURATION}"
          submit_and_poll "$ENDPOINT" "$PAYLOAD" "$ENDPOINT (${#IMAGE_URLS[@]} frame(s))"
      
      # ============================================================
      # MODE: omni — Omni Reference (full multimodal)
      #
      # Chinese: seedance-2.0-omni-reference
      #   params: images_list, video_files, audio_files, aspect_ratio, duration, quality
      #   tags:   @image1…@image9, @video1…@video3, @audio1…@audio3
      #   also:   @character:<request_id>, @omni-character:<character_id>
      #
      # Global:  seedance-2-omni-reference-no-video{-fast}
      #   params: images_list, audio_files, aspect_ratio, duration  (no video, no quality)
      #
      # VIP:     seedance-2-vip-omni-reference{-fast}
      #   params: images_list, audio_files, aspect_ratio, duration  (no video, no quality)
      # ============================================================
      elif [ "$MODE" = "omni" ]; then
          for FPATH in "${IMAGE_FILES[@]+"${IMAGE_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; IMAGE_URLS+=("$URL")
          done
          for FPATH in "${VIDEO_FILES[@]+"${VIDEO_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; VIDEO_URLS+=("$URL")
          done
          for FPATH in "${AUDIO_FILES[@]+"${AUDIO_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; AUDIO_URLS+=("$URL")
          done
      
          [ -z "$SUBJECT" ]           && { echo "Error: --subject is required for omni." >&2; exit 1; }
          [ ${#IMAGE_URLS[@]} -gt 9 ] && { echo "Error: Maximum 9 images allowed." >&2; exit 1; }
          [ ${#VIDEO_URLS[@]} -gt 3 ] && { echo "Error: Maximum 3 reference videos allowed." >&2; exit 1; }
          [ ${#AUDIO_URLS[@]} -gt 3 ] && { echo "Error: Maximum 3 reference audio files allowed." >&2; exit 1; }
      
          PROMPT_JSON=$(echo "$SUBJECT" | json_string)
      
          if [ "$TIER" = "chinese" ]; then
              PAYLOAD="{\"prompt\": $PROMPT_JSON, \"aspect_ratio\": \"$ASPECT\", \"duration\": $DURATION, \"quality\": \"$QUALITY\""
              [ ${#IMAGE_URLS[@]} -gt 0 ] && PAYLOAD="${PAYLOAD}, \"images_list\": $(build_json_array "${IMAGE_URLS[@]}")"
              [ ${#VIDEO_URLS[@]} -gt 0 ] && PAYLOAD="${PAYLOAD}, \"video_files\": $(build_json_array "${VIDEO_URLS[@]}")"
              [ ${#AUDIO_URLS[@]} -gt 0 ] && PAYLOAD="${PAYLOAD}, \"audio_files\": $(build_json_array "${AUDIO_URLS[@]}")"
              PAYLOAD="${PAYLOAD}}"
              submit_and_poll "seedance-2.0-omni-reference" "$PAYLOAD" "seedance-v2.0-omni-reference"
          else
              if [ ${#VIDEO_URLS[@]} -gt 0 ]; then
                  echo "Warning: $TIER omni does not support video references — ignoring --video-url/--video-file." >&2
              fi
              [ "$TIER" = "vip" ] && ENDPOINT="seedance-2-vip-omni-reference" || ENDPOINT="seedance-2-omni-reference-no-video"
              [ "$FAST" = true ]  && ENDPOINT="${ENDPOINT}-fast"
              PAYLOAD="{\"prompt\": $PROMPT_JSON, \"aspect_ratio\": \"$ASPECT\", \"duration\": $DURATION"
              [ ${#IMAGE_URLS[@]} -gt 0 ] && PAYLOAD="${PAYLOAD}, \"images_list\": $(build_json_array "${IMAGE_URLS[@]}")"
              [ ${#AUDIO_URLS[@]} -gt 0 ] && PAYLOAD="${PAYLOAD}, \"audio_files\": $(build_json_array "${AUDIO_URLS[@]}")"
              PAYLOAD="${PAYLOAD}}"
              submit_and_poll "$ENDPOINT" "$PAYLOAD"
          fi
      
      # ============================================================
      # MODE: omni-train — Train a custom Omni Reference character
      # Endpoint: seedance-2-omni-reference-train
      # Params:   image_url (single portrait), character_name, description
      # Output:   character_id — reference as @omni-character:<character_id>
      # ============================================================
      elif [ "$MODE" = "omni-train" ]; then
          for FPATH in "${IMAGE_FILES[@]+"${IMAGE_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; IMAGE_URLS+=("$URL")
          done
      
          [ ${#IMAGE_URLS[@]} -eq 0 ] && { echo "Error: Exactly 1 --image or --file required for omni-train." >&2; exit 1; }
          [ ${#IMAGE_URLS[@]} -gt 1 ] && { echo "Error: omni-train accepts only 1 reference image." >&2; exit 1; }
      
          PAYLOAD="{\"image_url\": \"${IMAGE_URLS[0]}\""
          if [ -n "$CHARACTER_NAME" ]; then
              NAME_JSON=$(echo "$CHARACTER_NAME" | json_string)
              PAYLOAD="${PAYLOAD}, \"character_name\": $NAME_JSON"
          fi
          if [ -n "$CHARACTER_DESC" ]; then
              DESC_JSON=$(echo "$CHARACTER_DESC" | json_string)
              PAYLOAD="${PAYLOAD}, \"description\": $DESC_JSON"
          fi
          PAYLOAD="${PAYLOAD}}"
      
          [ "$JSON_ONLY" = false ] && echo "Submitting omni-reference-train..." >&2
          SUBMIT=$(curl -s -X POST "${MUAPI_BASE}/seedance-2-omni-reference-train" "${HEADERS[@]}" -d "$PAYLOAD")
      
          API_ERROR=$(echo "$SUBMIT" | jq -r '.error // .detail // empty')
          if [ -n "$API_ERROR" ]; then
              echo "Error: $API_ERROR" >&2; echo "$SUBMIT" >&2; exit 1
          fi
      
          REQUEST_ID=$(echo "$SUBMIT" | jq -r '.request_id // empty')
          if [ -z "$REQUEST_ID" ]; then
              echo "Error: No request_id in response" >&2; echo "$SUBMIT" >&2; exit 1
          fi
      
          [ "$JSON_ONLY" = false ] && echo "Request ID: $REQUEST_ID" >&2
          [ "$JSON_ONLY" = false ] && echo "Training started — use @omni-character:<character_id> once complete." >&2
      
          if [ "$ASYNC" = true ]; then echo "$SUBMIT"; exit 0; fi
      
          [ "$JSON_ONLY" = false ] && echo "Waiting for training to complete..." >&2
          RESULT=$(poll_result "$REQUEST_ID")
          echo "$RESULT"
          CHAR_ID=$(echo "$RESULT" | jq -r '.outputs[0] // empty')
          if [ "$JSON_ONLY" = false ] && [ -n "$CHAR_ID" ]; then
              echo "Character trained! Reference as: @omni-character:$CHAR_ID" >&2
          fi
      
      # ============================================================
      # MODE: character — Build a reusable character sheet from 1–3 images
      # Endpoint: seedance-2-character
      # Params:   images_list (1–3), prompt (outfit description), character_name
      # Output:   request_id — reference as @character:<request_id>
      # ============================================================
      elif [ "$MODE" = "character" ]; then
          for FPATH in "${IMAGE_FILES[@]+"${IMAGE_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; IMAGE_URLS+=("$URL")
          done
      
          [ ${#IMAGE_URLS[@]} -eq 0 ] && { echo "Error: At least 1 --image or --file required for character." >&2; exit 1; }
          [ ${#IMAGE_URLS[@]} -gt 3 ] && { echo "Error: Maximum 3 reference images for character training." >&2; exit 1; }
      
          IMAGES_JSON=$(build_json_array "${IMAGE_URLS[@]}")
          PAYLOAD="{\"images_list\": $IMAGES_JSON"
          if [ -n "$SUBJECT" ]; then
              OUTFIT_JSON=$(echo "$SUBJECT" | json_string)
              PAYLOAD="${PAYLOAD}, \"prompt\": $OUTFIT_JSON"
          fi
          if [ -n "$CHARACTER_NAME" ]; then
              NAME_JSON=$(echo "$CHARACTER_NAME" | json_string)
              PAYLOAD="${PAYLOAD}, \"character_name\": $NAME_JSON"
          fi
          PAYLOAD="${PAYLOAD}}"
      
          [ "$JSON_ONLY" = false ] && echo "Submitting character training (${#IMAGE_URLS[@]} image(s))..." >&2
          SUBMIT=$(curl -s -X POST "${MUAPI_BASE}/seedance-2-character" "${HEADERS[@]}" -d "$PAYLOAD")
      
          API_ERROR=$(echo "$SUBMIT" | jq -r '.error // .detail // empty')
          if [ -n "$API_ERROR" ]; then
              echo "Error: $API_ERROR" >&2; echo "$SUBMIT" >&2; exit 1
          fi
      
          REQUEST_ID=$(echo "$SUBMIT" | jq -r '.request_id // empty')
          if [ -z "$REQUEST_ID" ]; then
              echo "Error: No request_id in response" >&2; echo "$SUBMIT" >&2; exit 1
          fi
      
          [ "$JSON_ONLY" = false ] && echo "Request ID: $REQUEST_ID" >&2
          [ "$JSON_ONLY" = false ] && echo "Use in prompts as: @character:$REQUEST_ID" >&2
      
          if [ "$ASYNC" = true ]; then echo "$SUBMIT"; exit 0; fi
      
          [ "$JSON_ONLY" = false ] && echo "Waiting for character sheet to complete..." >&2
          poll_result "$REQUEST_ID"
      
      # ============================================================
      # MODE: video-edit — Edit a video with a prompt + optional reference images
      # Endpoint: seedance-v2.0-video-edit
      # Params:   prompt, video_urls (1 max, 10MB/15s), images_list (up to 9),
      #           aspect_ratio, quality, remove_watermark
      # ============================================================
      elif [ "$MODE" = "video-edit" ]; then
          for FPATH in "${IMAGE_FILES[@]+"${IMAGE_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; IMAGE_URLS+=("$URL")
          done
          for FPATH in "${VIDEO_FILES[@]+"${VIDEO_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; VIDEO_URLS+=("$URL")
          done
      
          [ -z "$SUBJECT" ]            && { echo "Error: --subject (edit prompt) is required for video-edit." >&2; exit 1; }
          [ ${#VIDEO_URLS[@]} -eq 0 ]  && { echo "Error: --video-url or --video-file is required for video-edit." >&2; exit 1; }
          [ ${#VIDEO_URLS[@]} -gt 1 ]  && { echo "Error: video-edit supports 1 source video only (max 10MB, 15s)." >&2; exit 1; }
          [ ${#IMAGE_URLS[@]} -gt 9 ]  && { echo "Error: Maximum 9 reference images allowed." >&2; exit 1; }
      
          PROMPT_JSON=$(echo "$SUBJECT" | json_string)
          PAYLOAD="{\"prompt\": $PROMPT_JSON, \"video_urls\": [\"${VIDEO_URLS[0]}\"], \"aspect_ratio\": \"$ASPECT\", \"quality\": \"$QUALITY\""
          [ ${#IMAGE_URLS[@]} -gt 0 ]  && PAYLOAD="${PAYLOAD}, \"images_list\": $(build_json_array "${IMAGE_URLS[@]}")"
          [ "$REMOVE_WATERMARK" = true ] && PAYLOAD="${PAYLOAD}, \"remove_watermark\": true"
          PAYLOAD="${PAYLOAD}}"
      
          submit_and_poll "seedance-v2.0-video-edit" "$PAYLOAD"
      
      # ============================================================
      # MODE: watermark-remove — Strip watermark from a Seedance 2.0 video
      #
      # Basic: seedance-2.0-watermark-remover
      # Pro:   seedance-2-video-watermark-remover-pro  (--pro flag; up to 100MB)
      # ============================================================
      elif [ "$MODE" = "watermark-remove" ]; then
          for FPATH in "${VIDEO_FILES[@]+"${VIDEO_FILES[@]}"}"; do
              URL=$(upload_file "$FPATH") || exit 1; VIDEO_URLS+=("$URL")
          done
      
          [ ${#VIDEO_URLS[@]} -eq 0 ] && { echo "Error: --video-url or --video-file is required for watermark-remove." >&2; exit 1; }
      
          PAYLOAD="{\"video_url\": \"${VIDEO_URLS[0]}\"}"
      
          if [ "$PRO_WATERMARK" = true ]; then
              submit_and_poll "seedance-2-video-watermark-remover-pro" "$PAYLOAD"
          else
              submit_and_poll "seedance-2.0-watermark-remover" "$PAYLOAD"
          fi
      
      else
          echo "Error: Unknown mode '$MODE'." >&2
          echo "Valid: t2v | i2v | extend | first-last | omni | omni-train | character | video-edit | watermark-remove" >&2
          exit 1
      fi
      
  • SKILL.md 26.5 KB
    ---
    slug: muapi-seedance-2
    name: muapi-seedance-2
    version: "0.3.0"
    description: Expert Cinema Director skill for Seedance 2.0 (ByteDance) — high-fidelity video generation across Chinese, Global, and VIP tiers. Supports text-to-video, image-to-video, first-last-frame, omni reference, character training, omni-reference training, video editing, and watermark removal.
    acceptLicenseTerms: true
    ---
    
    # 🎬 Seedance 2.0 Cinema Expert
    
    **The definitive skill for "Director-Level" AI video orchestration.**
    Seedance 2.0 is not a descriptive model; it is an *instructional* model. It responds best to technical cinematography, physics directives, and precise camera grammar.
    
    ## Core Competencies
    
    1.  **Text-to-Video (t2v)**: Generate cinematic video from a Director Brief — Chinese, Global, or VIP tier.
    2.  **Image-to-Video (i2v)**: Animate 1–9 reference images — Chinese, Global (smart mode), or VIP tier.
    3.  **Video Extension (extend)**: Seamlessly continue an existing Seedance 2.0 video (Chinese tier).
    4.  **First & Last Frame (first-last)**: Interpolate a fluid video between a start image and end image (Global/VIP).
    5.  **Omni Reference (omni)**: Full multimodal reference with images + audio + character refs (all tiers).
    6.  **Omni Reference Training (omni-train)**: Train a custom persistent character for identity-consistent generation.
    7.  **Character Sheet (character)**: Build a reusable character from 1–3 images (Chinese tier).
    8.  **Video Edit (video-edit)**: Edit an existing video with a prompt + optional reference images (Chinese tier).
    9.  **Watermark Removal (watermark-remove)**: Strip Seedance 2.0 watermarks (basic or Pro).
    
    ---
    
    ## 🏷️ Tiers
    
    | Tier | Flag | Censorship | Aspect Ratios | Duration | Quality param |
    |:---|:---|:---|:---|:---|:---|
    | **Chinese** (default) | `--tier chinese` | Low | 16:9, 9:16, 4:3, 3:4 | 5 / 10 / 15 s | Yes (basic/high) |
    | **Global** | `--tier global` | Standard | + 21:9, 1:1 | Any 4–15 s | No |
    | **VIP** | `--tier vip` | Low | + 21:9, 1:1 | Any 4–15 s | No |
    
    Add `--fast` to any Global or VIP call to use the fast-queue variant (lower latency, same quality).
    
    ---
    
    ## 📥 Input Limits
    
    | Input Type | Chinese i2v/omni | Global/VIP i2v/omni | Formats | Max Size |
    |:---|:---|:---|:---|:---|
    | Images | ≤ 9 | ≤ 9 | jpeg, png, webp | 30 MB each |
    | Videos | ≤ 3 (omni only) | Not supported | mp4, mov | 50 MB each |
    | Audio | ≤ 3 | ≤ 3 | mp3, wav | 15 MB each |
    | **First-Last** | — | 1–2 images | jpeg, png, webp | 30 MB each |
    | **Video Edit** | 1 video + ≤ 9 imgs | — | mp4 ≤ 10 MB / 15s | — |
    
    **Output**: 4–15 seconds, auto-generated sound, 480p–720p.
    
    ---
    
    ## ⚠️ Restrictions
    
    - **No realistic human faces** in uploaded images/videos (except character/omni-train modes).
    - `--mode extend` requires a `request_id` from a prior `seedance-v2.0-t2v` or `seedance-v2.0-i2v` job.
    - `--mode first-last` requires `--tier global` or `--tier vip`.
    - Global/VIP omni does **not** support video references (images + audio only).
    - `--quality` applies to Chinese tier only.
    
    ---
    
    ## 🔗 Core Syntax: The @ Reference System
    
    Assign explicit roles to each uploaded asset. Tags differ by mode.
    
    ### Chinese Tier (i2v, omni)
    ```
    @image1  @image2  ...  @image9    (images_list order)
    @video1  @video2  @video3         (video_files order)
    @audio1  @audio2  @audio3         (audio_files order)
    ```
    
    ### Global/VIP Omni (omni-reference-no-video / vip-omni-reference)
    ```
    @image1  @image2  ...  @image9    (images_list order)
    @audio1  @audio2  @audio3         (audio_files order)
    ```
    
    ### Character References (all tiers)
    ```
    @character:<request_id>            — from seedance-2-character or completed t2v/i2v job
    @omni-character:<character_id>     — from seedance-2-omni-reference-train output
    ```
    
    ### Role Assignment Table
    
    | Purpose | Example Syntax |
    |:---|:---|
    | First frame | `@Image1 as the first frame` |
    | Last frame | `@Image2 as the last frame` |
    | Character appearance | `@Image1's character as the subject` |
    | Scene / background | `scene references @Image3` |
    | Camera movement | `reference @Video1's camera movement` |
    | Action / motion | `reference @Video1's action choreography` |
    | Visual effects | `completely reference @Video1's effects and transitions` |
    | Rhythm / tempo | `video rhythm references @Video1` |
    | Voice / tone | `narration voice references @Video1` |
    | Background music | `BGM references @Audio1` |
    | Sound effects | `sound effects reference @Video3's audio` |
    | Outfit / clothing | `wearing the outfit from @Image2` |
    | Product appearance | `product details reference @Image3` |
    
    ### Multi-Reference Combination
    ```
    @Image1's character as the subject, reference @Video1's camera movement
    and action choreography, BGM references @Audio1, scene references @Image2
    ```
    
    ---
    
    ## 🏗️ Technical Specification: The Director Brief
    
    Structure prompts using this six-component hierarchy. Order matters — composition first, texture and micro-motion last:
    
    | Component | Instruction Type | Example |
    |:---|:---|:---|
    | **Scene** | Environment + Lighting | "A rain-soaked cyberpunk street, magenta neon reflections on wet asphalt." |
    | **Subject** | Identity + Detail | "A woman in a black trenchcoat, determined focus, cinematic skin textures." |
    | **Action** | Fluid Interaction | "Walking forward through the crowd, coat billowing slightly in the wind." |
    | **Camera** | Movement + Lens + Speed | "Medium tracking shot, 35mm lens, slow dolly backward over 6s. Subtle handheld jitter." |
    | **Audio** | Music + SFX + Ambience | "Low ambient hum, distant traffic, single piano note at 5s. No dialogue." |
    | **Pacing/Style** | Timing + Mood + Grade | "Cinematic epic, warm color grade, shallow DOF. Slow build — single action only, no scene cuts." |
    
    > **Seedance 2.0 generates audio natively.** Always include an Audio directive — even one sentence. Without it the model generates random ambient sound that may not match your scene.
    
    ### Time-Segmented Prompts (Recommended for 10s+ videos)
    Break prompts into timed segments for precise control:
    ```
    0–3s: [opening scene, camera move, establishing action]
    3–6s: [mid-section development, subject in motion]
    6–10s: [climax or key action beat]
    10–15s: [resolution, brand/product hold, text/tagline fade in]
    ```
    
    > **Single-beat rule:** Each segment should contain one action. 4–7s = one beat. 10–15s = 3–4 beats maximum. Overloading a segment with multiple narrative changes degrades output quality.
    
    ### Negative Prompting
    
    Seedance 2.0 supports appending negative guidance directly in the prompt. Use plain language at the end:
    
    ```
    [your director brief above]
    Avoid: camera shake, jump cuts, lens distortion, overexposure, watermarks, text overlays.
    ```
    
    Common negative additions:
    - `Avoid: abrupt cuts, scene changes, multiple locations.` (for single-take shots)
    - `Avoid: human faces, realistic people.` (for product-only content)
    - `Avoid: fast motion, blur, unstable framing.` (for smooth product reveals)
    
    ---
    
    ## 🎥 Camera Language Reference
    
    ### Basic Movements
    | Term | Description |
    |:---|:---|
    | Push in / Slow push | Camera moves toward subject |
    | Pull back / Pull away | Camera moves away from subject |
    | Pan left/right | Camera rotates horizontally |
    | Tilt up/down | Camera rotates vertically |
    | Track / Follow shot | Camera follows subject movement |
    | Orbit / Revolve | Camera circles around subject |
    | One-take / Oner | Continuous shot with no cuts |
    
    ### Advanced Techniques
    | Term | Description |
    |:---|:---|
    | Hitchcock zoom (dolly zoom) | Push in + zoom out — creates vertigo effect |
    | Fisheye lens | Ultra-wide distorted lens |
    | Low angle / High angle | Camera below/above subject |
    | Bird's eye / Overhead | Top-down view |
    | First-person POV (FPV) | Immersive subjective camera from character/object's eyes — GoPro-style wide angle, forward motion, no cuts |
    | Drone flythrough | Cinematic aerial descent — gimbal-stabilized, sweeping lateral arc, DJI Inspire aesthetic |
    | Architectural flythrough | Ground-level continuous dolly through connected spaces — one-take, practical lighting |
    | Whip pan | Very fast horizontal pan with motion blur |
    | Crane shot | Vertical movement like a crane arm |
    
    ### Shot Sizes
    | Term | Description |
    |:---|:---|
    | Extreme close-up | Eyes, mouth, or small detail only |
    | Close-up | Face fills frame |
    | Medium close-up | Head and shoulders |
    | Medium shot | Waist up |
    | Full shot | Entire body |
    | Wide / Establishing shot | Full environment |
    
    ---
    
    ## 🧠 Prompt Optimization Protocol
    
    **The Agent MUST transform user intent into a technical "Director Brief" before execution.**
    
    1.  **Technical Grammar**: Use camera terms: *Dolly In/Out, Crane Shot, Whip Pan, Tracking Shot, Anamorphic Lens, Shallow Depth of Field, High-Speed Dive, Orbital Arc*.
    2.  **Physics Directives**: Use "caustic patterns," "volumetric rays," or "subsurface scattering" instead of "good lighting."
    3.  **Timecode Notation**: For multi-beat scenes, use `[00:00-00:05s]` format to specify timing.
    4.  **Tag References**: If files provided, use: *"Replicate the camera movement of @video1 while maintaining the visual style of @image1."* (lowercase, 1-based index)
    5.  **ORDER MATTERS**: Tokens at the start define composition; tokens at the end define texture and micro-motion.
    6.  **Multi-Image i2v**: Provide up to 9 reference images. The model blends aspects (style, identity, environment) across all inputs.
    7.  **Audio is mandatory**: Seedance 2.0 generates audio natively. Always include an Audio line — music genre/tone, key SFX, ambient texture. Silent direction = random audio.
    8.  **Single-beat discipline**: Each timed segment = one action. Cramming two narrative beats into 4s degrades physics and motion consistency.
    
    ---
    
    ## 🎭 Capability-Specific Patterns
    
    ### 1. Character Consistency
    ```
    The man in @Image1 walks tiredly down the hallway, slowing his steps,
    finally stopping at his front door. Close-up on his face — he takes a
    deep breath, replaces the weariness with a relaxed expression.
    Maintain high character consistency, zero facial flicker, persistent clothing details.
    ```
    
    ### 2. Camera Movement Replication
    ```
    Reference @Image1's male character. He is in @Image2's elevator.
    Completely reference @Video1's camera movements and facial expressions.
    Hitchcock zoom during the fear moment, then orbit shots of the interior.
    Elevator doors open, follow shot walking out.
    ```
    
    ### 3. Video Extension (Forward)
    ```
    Extend @Video1 by 10 seconds.
    1–5s: Light and shadow slowly slide across table through venetian blinds.
    6–10s: A coffee bean drifts down. Camera pushes in toward it until screen goes black.
    English text gradually appears — "Lucky Coffee", "Breakfast", "AM 7:00-10:00".
    ```
    
    ### 4. Video Extension (Reverse / Prepend)
    ```
    Extend backward 10s. In warm afternoon light, the camera starts from
    the corner with awning fluttering in the breeze, slowly tilting down
    to flowers peeking out at the wall base, building anticipation for the main scene.
    ```
    
    ### 5. Video Editing (Modify Existing)
    ```
    Subvert @Video1's plot — the character's expression shifts from warmth to
    cold determination. The action is decisive, without hesitation.
    Maintain all other visual elements (scene, lighting, timing).
    ```
    
    ### 6. Music Beat-Matching
    ```bash
    bash scripts/generate-seedance.sh \
      --mode i2v \
      --file img1.jpg --file img2.jpg --file img3.jpg \
      --video-file reference_edit.mp4 \
      --audio-file track.mp3 \
      --subject "@Image1 @Image2 @Image3 — match the keyframe positions and rhythm of @Video1 for beat-synced cuts. BGM references @Audio1. More dynamic movement, dreamlike visual style." \
      --duration 15 --quality high
    ```
    
    ### 7. Dialogue / Voice Acting
    ```
    In the "Cat & Dog Roast Show" — emotionally expressive comedy segment:
    Cat host (licking paw, rolling eyes): "Who understands my suffering?"
    Dog host (head tilted, tail wagging): "You're one to talk? You sleep 18 hours a day..."
    Sound: lively studio ambience, audience laughter, punchy transitions.
    ```
    
    ### 8. One-Take / Long Take
    ```
    @Image1 @Image2 @Image3 — one-take tracking shot following a runner
    from the street up stairs, through a corridor, onto a rooftop,
    finally overlooking the city. No cuts throughout.
    ```
    
    ### 9. E-commerce / Product Showcase
    ```bash
    bash scripts/generate-seedance.sh \
      --mode i2v \
      --file product.jpg \
      --subject "Deconstruct the product. Static camera. Hamburger suspended mid-air, rotating slowly. Ingredients separate and reassemble. Cheese continues to melt and drip. Ultimate food aesthetics." \
      --intent "product" \
      --aspect "9:16" \
      --duration 15 --quality high
    ```
    
    ### 10. Science / Educational Visualization
    ```bash
    bash scripts/generate-seedance.sh \
      --subject "15-second health educational clip. 0–5s: Transparent blue human upper body, camera pushes into a clear artery, blood flows smoothly. 5–10s: Sugar and fat particles enter bloodstream, lipid deposits form on vessel walls. 10–15s: Vessel narrows, before/after comparison. 4K medical CGI, semi-transparent visualization." \
      --intent "educational" \
      --duration 15 --quality high
    ```
    
    ### 11. FPV First-Person Shot
    ```bash
    bash scripts/generate-seedance.sh \
      --subject "Immersive first-person POV shot. Camera glides at eye level through a narrow mountain trail,
    trees rushing past in peripheral blur, rocky terrain below. Slight natural stabilization with wide-angle lens.
    Continuous forward motion, no cuts throughout. Trail opens into a clearing — mountain peak visible ahead.
    Sound: wind, footsteps on gravel, distant birds. Natural ambient audio, no music." \
      --intent "fpv" \
      --aspect "9:16" --duration 10 --quality high
    ```
    
    ### 12. Cinematic Drone Flythrough
    ```bash
    bash scripts/generate-seedance.sh \
      --subject "Cinematic aerial drone shot. Camera starts at 150m altitude above a coastal city at golden hour.
    Smooth gimbal-stabilized descent along a sweeping lateral arc, dropping toward a rooftop terrace.
    Long shadows cast across building tops, warm light on ocean surface. High-speed dive closes in
    to product on the terrace — final frame settles into a medium close-up.
    Sound: gentle wind, distant city hum, soft cinematic score building to resolve." \
      --intent "drone" \
      --aspect "16:9" --duration 10 --tier global --view
    ```
    
    ---
    
    ## 🎨 Prompt Templates
    
    ### Cinematic Film
    ```
    [SCENE] Rain-soaked cyberpunk alley, neon signs reflected on wet cobblestones.
    [SUBJECT] A lone figure in a weathered trench coat, face obscured by a wide-brim hat.
    [ACTION] Walking slowly, each step splashing neon color into the puddles.
    [CAMERA] Low-angle tracking shot, anamorphic lens, slow dolly in. Rack focus to face.
    [STYLE] Denis Villeneuve aesthetic, high contrast, desaturated blues and magentas. 24fps.
    ```
    
    ### Product Ad (15s)
    ```
    Reference @Video1's editing style. Replace @Video1's product with @Image1 as hero.
    0–3s: Product enters with dynamic rotation, close-up on surface texture and logo.
    4–8s: Multiple angle transitions — front, side, back — with highlight scanning light.
    9–12s: Product in lifestyle context showing usage.
    13–15s: Hero shot with brand tagline, background music builds to resolution.
    Sound: Reference @Video1's BGM. Add product interaction sound effects.
    ```
    
    ### Short Drama (15s)
    ```
    Scene (0–5s): Close-up on character's reddened eyes, finger pointing accusingly.
    Dialogue 1: "What exactly are you trying to take from me?"
    Scene (6–10s): Other character trembles, holding up evidence, steps forward.
    Dialogue 2: "I'm not deceiving you! This is what he entrusted to me!"
    Scene (11–15s): Evidence revealed, first character freezes — anger shifts to shock.
    Sound: Urgent piano + static interference, sobbing, muffled voice blending in.
    Duration: Precise 15 seconds, every frame tight, no filler.
    ```
    
    ### Dance / Beat-Sync (13s)
    ```
    Have the character in @Image1 replicate the dance moves and beat-synced
    music from @Video1. Generate a 13-second video. Movements should be
    smooth with no stuttering or freezing.
    ```
    
    ### Scenery Montage (15s)
    ```
    @Image1 @Image2 @Image3 @Image4 @Image5 @Image6 — landscape scene images.
    Reference @Video1's visual rhythm, inter-scene transitions, visual style,
    and music tempo for beat-synced editing.
    ```
    
    ### Advertising / Product Motion
    ```
    [SCENE] Minimalist white studio, single product on a rotating pedestal.
    [ACTION] Subtle 360° rotation, product details catching specular highlights.
    [CAMERA] Tight medium shot, macro lens pass over surface texture, slow orbit.
    [STYLE] Commercial grade, perfect exposure, zero background distraction.
    ```
    
    ### Action / Physics
    ```
    [SCENE] Desert canyon at sunrise, sandy terrain, long shadows.
    [SUBJECT] High-performance sports car accelerating through a turn.
    [ACTION] Rear wheels spinning with dust plume, chassis flexing under g-force.
    [CAMERA] Low hero angle dolly tracking alongside, then whip pan to lead car.
    [STYLE] Hollywood racing film, warm golden grade, motion blur on wheels. 24fps.
    ```
    
    ### Character Consistency (Martial Arts)
    ```
    [SUBJECT] Same fighter throughout: young woman, white gi, black belt, determined expression.
    [ACTION] Fluid kata sequence — rising block, stepping side kick, spinning back fist.
    [CAMERA] Full-body wide shot, then cut to close-up of fist impact in slow motion.
    [STYLE] Maintain identical lighting, clothing, and facial features in every frame. Zero flicker.
    ```
    
    ---
    
    ## 🎚️ Style & Quality Modifiers
    
    ### Visual Style
    - `Cinematic quality, film grain, shallow depth of field`
    - `2.35:1 widescreen, 24fps`
    - `Ink wash painting style` / `Anime style` / `Photorealistic`
    - `High saturation neon colors, cool-warm contrast`
    - `4K medical CGI, semi-transparent visualization`
    
    ### Mood / Atmosphere
    - `Tense and suspenseful` / `Warm and healing` / `Epic and grand`
    - `Comedy with exaggerated expressions`
    - `Documentary tone, restrained narration`
    
    ### Audio Direction
    - `Background music: grand and majestic`
    - `Sound effects: footsteps, crowd noise, car sounds`
    - `Voice tone reference @Video1`
    - `Beat-synced transitions matching music rhythm`
    
    ---
    
    ## ❌ Common Mistakes to Avoid
    
    1. **Vague references**: Don't say "reference @Video1" — specify WHAT to reference (camera? action? effects? rhythm?)
    2. **Conflicting instructions**: Don't ask for "static camera" and "orbit shot" in the same segment.
    3. **Overloading**: Don't pack too many scenes into 4–5 seconds — keep it physically plausible.
    4. **Missing @ assignments**: If you upload 5 images, make sure each one is referenced with a clear purpose.
    5. **Ignoring audio**: Sound design dramatically improves output — always include audio direction.
    6. **Forgetting duration**: Match prompt complexity to the selected generation length.
    7. **Real faces**: Don't upload real human photos — the system will block them.
    8. **Keyword soup**: DO NOT use "8k, masterpiece, trending." Use technical descriptions instead.
    9. **Discontinuous action**: Avoid "The man runs and then he stops." Use fluid transitional language.
    10. **Missing audio direction**: Seedance 2.0 generates audio natively — always specify music tone, SFX, or ambience. Skipping it produces random sound.
    11. **Narrative overload per segment**: Each timed segment should contain one action beat. Multiple scene changes in 4s produce degraded physics and motion artifacts.
    12. **FPV without continuous motion**: FPV requires a motion-rich environment to work — a static room with FPV intent will not trigger the immersive effect. Pair FPV with corridors, streets, natural terrain, or product flyovers.
    13. **Drone without a destination**: Drone shots need a resolve point — specify what the camera descends toward or arrives at. "Drone shot" alone produces aimless floating.
    
    ---
    
    ## 🚀 Protocol: All Modes
    
    ### Mode 1: Text-to-Video (t2v)
    
    ```bash
    # Chinese tier (default) — epic reveal
    bash scripts/generate-seedance.sh \
      --subject "hidden Andes temple, mist through the canopy" \
      --intent epic --aspect "16:9" --duration 10 --quality high --view
    
    # Global tier — 21:9 cinematic, 12s
    bash scripts/generate-seedance.sh \
      --tier global \
      --subject "neon cyberpunk alley, rain-slicked streets" \
      --intent tense --aspect "21:9" --duration 12 --view
    
    # VIP fast — square social format
    bash scripts/generate-seedance.sh \
      --tier vip --fast \
      --subject "product rotating on a pedestal, specular highlights" \
      --intent product --aspect "1:1" --duration 6
    ```
    
    ### Mode 2: Image-to-Video (i2v)
    
    ```bash
    # Chinese tier — animate with video/audio refs
    bash scripts/generate-seedance.sh --mode i2v \
      --file character.jpg --video-file ref_motion.mp4 --audio-file bgm.mp3 \
      --subject "@image1's character walks forward, @video1's camera movement, BGM references @audio1" \
      --quality high --view
    
    # Global tier — 1 image = first frame anchor
    bash scripts/generate-seedance.sh --mode i2v --tier global \
      --file hero.jpg \
      --subject "hero strides forward, coat billowing in slow motion" \
      --duration 8 --view
    
    # VIP fast — 3 images, omni ref mode (2-9 images switches to omni)
    bash scripts/generate-seedance.sh --mode i2v --tier vip --fast \
      --file char.jpg --file env.jpg --file style.jpg \
      --subject "@image1 character walks through @image2's environment in @image3's style" \
      --duration 10
    ```
    
    ### Mode 3: Extend Video (Chinese tier)
    
    ```bash
    # Extend naturally
    bash scripts/generate-seedance.sh --mode extend \
      --request-id "abc-123-def-456" --duration 10
    
    # Extend with directional prompt
    bash scripts/generate-seedance.sh --mode extend \
      --request-id "abc-123-def-456" \
      --subject "camera continues pulling back, revealing the vast city below" \
      --intent reveal --duration 10 --quality high --view
    ```
    
    ### Mode 4: First & Last Frame (Global/VIP)
    
    ```bash
    # One image = first frame anchor
    bash scripts/generate-seedance.sh --mode first-last --tier global \
      --file opening_scene.jpg \
      --subject "smooth cinematic push into the scene" --duration 6 --view
    
    # Two images = interpolate between first and last frame
    bash scripts/generate-seedance.sh --mode first-last --tier vip --fast \
      --file start.jpg --file end.jpg \
      --subject "dramatic reveal transition between the two frames" --duration 8 --view
    ```
    
    ### Mode 5: Omni Reference (omni)
    
    ```bash
    # Chinese tier — images + video + audio refs
    bash scripts/generate-seedance.sh --mode omni --tier chinese \
      --file character.jpg --video-file ref_edit.mp4 --audio-file track.mp3 \
      --subject "@image1's character performs moves from @video1, BGM references @audio1" \
      --duration 15 --quality high --view
    
    # Global tier — images + audio, no video refs
    bash scripts/generate-seedance.sh --mode omni --tier global \
      --file portrait.jpg --audio-file bgm.mp3 \
      --subject "@image1 is the main character. Walking through a neon-lit city at night. BGM references @audio1." \
      --aspect "16:9" --duration 8 --view
    
    # VIP tier — with trained omni character
    bash scripts/generate-seedance.sh --mode omni --tier vip --fast \
      --subject "@omni-character:char_1775422630065_4vbana walks through a garden at golden hour" \
      --aspect "16:9" --duration 10 --view
    
    # With @character ref (from character mode)
    bash scripts/generate-seedance.sh --mode omni --tier global \
      --subject "@character:cab9517f-1818-4910-8d66 walks down a rain-soaked alley, cinematic tracking shot" \
      --duration 8 --view
    ```
    
    ### Mode 6: Train Omni Reference Character (omni-train)
    
    ```bash
    # Train from a single portrait
    bash scripts/generate-seedance.sh --mode omni-train \
      --file portrait.jpg \
      --character-name "Alex" \
      --character-desc "A brave explorer with piercing blue eyes"
    
    # Use in omni prompts after training completes:
    # @omni-character:<character_id returned>
    ```
    
    ### Mode 7: Character Sheet (character, Chinese tier)
    
    ```bash
    # Build character from 1–3 reference images
    bash scripts/generate-seedance.sh --mode character \
      --file ref1.jpg --file ref2.jpg \
      --character-name "Hero" \
      --subject "red leather jacket with black jeans and white sneakers"
    
    # Use the returned request_id in t2v/i2v/omni:
    # @character:<request_id>
    ```
    
    ### Mode 8: Video Edit (video-edit, Chinese tier)
    
    ```bash
    # Replace subject in an existing video
    bash scripts/generate-seedance.sh --mode video-edit \
      --video-url "https://example.com/input.mp4" \
      --file replacement_character.jpg \
      --subject "Replace the running man with @image1. Preserve exact motion, speed, and camera shake." \
      --quality high --view
    
    # Edit with watermark removal in one step
    bash scripts/generate-seedance.sh --mode video-edit \
      --video-file source.mp4 \
      --subject "Subvert the plot — the character's expression shifts from warmth to cold determination." \
      --remove-watermark --view
    ```
    
    ### Mode 9: Watermark Removal (watermark-remove)
    
    ```bash
    # Basic watermark removal
    bash scripts/generate-seedance.sh --mode watermark-remove \
      --video-url "https://example.com/seedance_output.mp4" --view
    
    # Pro watermark removal (100MB limit, better quality)
    bash scripts/generate-seedance.sh --mode watermark-remove \
      --video-file my_video.mp4 --pro --view
    ```
    
    ### Async Pattern
    
    ```bash
    # Submit and get request_id immediately
    RESULT=$(bash scripts/generate-seedance.sh --tier vip --fast --subject "..." --async --json)
    REQUEST_ID=$(echo "$RESULT" | jq -r '.request_id')
    
    # Check status later
    bash ../../../../core/media/generate-video.sh --result "$REQUEST_ID"
    ```
    
    ---
    
    ## ⚙️ Implementation Details
    
    ### Endpoint Reference
    
    | Mode | Tier | Endpoint |
    |:---|:---|:---|
    | `t2v` | chinese | `seedance-v2.0-t2v` |
    | `t2v` | global | `seedance-2-text-to-video{-fast}` |
    | `t2v` | vip | `seedance-2-vip-text-to-video{-fast}` |
    | `i2v` | chinese | `seedance-v2.0-i2v` |
    | `i2v` | global | `seedance-2-image-to-video{-fast}` |
    | `i2v` | vip | `seedance-2-vip-image-to-video{-fast}` |
    | `extend` | chinese | `seedance-v2.0-extend` |
    | `first-last` | global | `seedance-2-first-last-frame{-fast}` |
    | `first-last` | vip | `seedance-2-vip-first-last-frame{-fast}` |
    | `omni` | chinese | `seedance-2.0-omni-reference` |
    | `omni` | global | `seedance-2-omni-reference-no-video{-fast}` |
    | `omni` | vip | `seedance-2-vip-omni-reference{-fast}` |
    | `omni-train` | any | `seedance-2-omni-reference-train` |
    | `character` | any | `seedance-2-character` |
    | `video-edit` | chinese | `seedance-v2.0-video-edit` |
    | `watermark-remove` | — | `seedance-2.0-watermark-remover` / `seedance-2-video-watermark-remover-pro` |
    
    ### Parameter Differences by Tier
    
    | Parameter | Chinese | Global | VIP |
    |:---|:---|:---|:---|
    | `aspect_ratio` | 16:9, 9:16, 4:3, 3:4 | + 21:9, 1:1 | + 21:9, 1:1 |
    | `duration` | 5 / 10 / 15 (enum) | 4–15 (any int) | 4–15 (any int) |
    | `quality` | basic / high | — (not supported) | — (not supported) |
    | `video_files` (omni) | ✅ up to 3 | ❌ | ❌ |
    | `audio_files` (omni) | ✅ up to 3 | ✅ up to 3 | ✅ up to 3 |
    | Fast variant | ❌ | ✅ (`--fast`) | ✅ (`--fast`) |
    
    This skill acts as a **Cinematographic Wrapper** that translates creative intent into high-fidelity technical instructions for the `muapi` core.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related