
Seedance Cli
- 1 installs
- 1 repo stars
- Updated June 21, 2026
- vaxin/seedance-cli
Generate AI video via the Seedance model from the command line.
About
A CLI agent skill for generating AI video using the Seedance model from the terminal. A developer uses it to produce short AI video clips as content. Content is name-only, so flags and output formats are inferred from the Seedance CLI convention.
- Seedance video generation
- CLI tooling
- AI video
Seedance Cli by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,200 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 7, 2026 (Skillselion catalog sync)
npx skills add https://github.com/vaxin/seedance-cli --skill seedance-cliAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 1 |
| Security audit | 2 / 3 scanners passed |
| Last updated | June 21, 2026 |
| Repository | vaxin/seedance-cli ↗ |
What it does
Generate AI video via the Seedance model from the command line.
Files
seedance-cli
Command-line interface for Seedance 2.0 video generation on Volcengine Ark.
Binary name: seedance. Written in Rust. Config stored at ~/.config/seedance/config.toml. Task history in local SQLite at ~/.config/seedance/tasks.db.
---
Quick Start
# 1. Configure API key (interactive)
seedance config init
# 2. Generate a video (text-to-video)
seedance generate "A cat sits on a windowsill watching rain fall outside"
# 3. Generate and wait for result
seedance generate "Sunset over mountain lake, slow drone pullback" --wait
# 4. Generate with full control
seedance generate "Product bottle on marble surface, slow orbit" \
--model standard --duration 8 --ratio 16:9 --resolution 1080p --wait---
Installation
# From source
cargo install --path .
# Verify
seedance --version---
Environment
| Variable | Purpose |
|---|---|
ARK_API_KEY | API key (overrides config file if set) |
Priority: ARK_API_KEY env var > config.toml api_key.
---
Commands
seedance generate — Create a Video
The core command. Supports T2V, I2V, V2V, and R2V workflows.
seedance generate <PROMPT> [OPTIONS]PROMPT can be a literal string or @file.txt to read from a file.
Generation Options
| Flag | Short | Default | Description |
|---|---|---|---|
--model | -m | standard | Model variant: standard or fast |
--duration | -d | 5 | Duration in seconds (4–15) |
--ratio | -r | 16:9 | Aspect ratio (16:9 9:16 4:3 3:4 21:9 1:1 adaptive) |
--resolution | 1080p | Resolution (480p 720p 1080p) | |
--seed | Random seed for reproducibility | ||
--watermark | false | Add watermark | |
--audio-gen | false | Enable native audio generation | |
--return-last-frame | false | Return the last frame as an image | |
--callback | Webhook callback URL | ||
--web-search | false | Enable web search tool (text-only input) | |
--service-tier | Service tier: flex for offline inference |
Material Inputs (I2V / V2V / R2V)
| Flag | Short | Repeatable | Max | Description |
|---|---|---|---|---|
--image | -i | Yes | 9 | Image reference (URL or local path) |
--video | -v | Yes | 3 | Video reference (URL or local path) |
--audio | -a | Yes | 3 | Audio reference (URL or local path) |
--first-frame | No | 1 | First frame image (role: first_frame) | |
--last-frame | No | 1 | Last frame image (role: last_frame) |
Total files across all types: max 12 (Rule of 12).
Local files are automatically converted to base64 data URIs. Supported formats: JPG, PNG, WEBP (images), MP4, MOV (video), MP3 (audio).
Asset URLs: Virtual avatars and authorized real-person assets can be passed via asset://<asset-id> to any --image, --video, or --audio flag.
Wait & Output Options
| Flag | Short | Default | Description |
|---|---|---|---|
--wait | -w | false | Wait for completion and auto-download |
--output | -o | Output file path (default: seedance_<id>.mp4) | |
--timeout | 300 | Max wait seconds (with --wait) | |
--poll-interval | 10 | Poll interval seconds | |
--strict | false | Exit code 2 on timeout (for CI) |
Output Format Options
| Flag | Short | Description |
|---|---|---|
--quiet | -q | Quiet mode: only print task_id or final file path |
--json | JSON output |
---
seedance extend — Extend or Bridge Videos
Extend a video forward/backward, or bridge 2–3 clips into one continuous video. Pass local video files directly. Videos longer than min(5s, --duration) are automatically trimmed from the end before upload(需要安装 ffmpeg).
seedance extend --source-video <VIDEO>... <PROMPT> [OPTIONS]Pass 1 video for forward/backward extension, or 2–3 videos for multi-clip bridging.
| Flag | Short | Default | Description |
|---|---|---|---|
--source-video | -s | (required) | Source video file (1–3, repeatable). Auto-trimmed if too long |
--model | -m | standard | Model variant |
--duration | -d | 5 | Duration (4–15s) |
--ratio | -r | 16:9 | Aspect ratio |
--resolution | 1080p | Resolution | |
--audio-gen | false | Enable audio generation | |
--watermark | false | Add watermark | |
--return-last-frame | false | Return last frame (for chaining further extends) | |
--seed | Random seed | ||
--image | -i | Additional image reference (repeatable) | |
--wait | -w | false | Wait and auto-download |
--output | -o | Output file path | |
--timeout | 300 | Max wait seconds | |
--strict | false | Exit 2 on timeout | |
--quiet / --json | Output format |
Examples:
# Forward extension (auto-trims if video > 5s)
seedance extend -s input.mp4 "角色走出房间,镜头跟随" --duration 8 --wait
# Backward extension
seedance extend -s source.mp4 "向前延长视频1,镜头从远处推近" --wait
# Bridge 3 clips (each auto-trimmed to min(5s, duration))
seedance extend -s clip1.mp4 -s clip2.mp4 -s clip3.mp4 \
"视频1打开门,进入室内,接视频2,镜头推进,接视频3" \
--duration 10 --audio-gen --wait
# Chain generation with return-last-frame
seedance generate "开场:日出" --wait -o opening.mp4
seedance extend -s opening.mp4 "中段:城市苏醒" --duration 8 --wait -o middle.mp4
seedance extend -s middle.mp4 "结尾:人潮涌动" --duration 8 --wait -o ending.mp4---
seedance edit — Edit an Existing Video
Edit a completed video: replace subjects, add/remove objects, repaint regions. Automatically resolves the source video URL from task ID.
seedance edit <SOURCE_TASK_ID> <PROMPT> [OPTIONS]| Flag | Short | Default | Description |
|---|---|---|---|
--model | -m | standard | Model variant |
--duration | -d | 5 | Duration (4–15s) |
--ratio | -r | 16:9 | Aspect ratio |
--resolution | 1080p | Resolution | |
--audio-gen | false | Enable audio generation | |
--watermark | false | Add watermark | |
--seed | Random seed | ||
--image | -i | Image for replacement/addition (repeat) | |
--audio | -a | Audio reference (repeatable) | |
--wait | -w | false | Wait and auto-download |
--output | -o | Output file path | |
--timeout | 300 | Max wait seconds | |
--strict | false | Exit 2 on timeout | |
--quiet / --json | Output format |
Examples:
# Replace subject
seedance edit cgt-abc123 "将视频1中的香水替换成图片1中的面霜,运镜不变" \
--image cream.jpg --duration 5 --audio-gen --wait
# Modify attribute
seedance edit cgt-abc123 "将面霜颜色修改为白色" --ratio 16:9 --wait
# Add element
seedance edit cgt-abc123 "在桌面右侧添加一杯咖啡" --wait---
seedance status — Check Task Status
seedance status <TASK_ID> [OPTIONS]| Flag | Default | Description |
|---|---|---|
--json | false | JSON output |
--wait | false | Poll until task completes |
--timeout | 300 | Max wait seconds (with --wait) |
---
seedance download — Download Completed Video
seedance download <TASK_ID> [OPTIONS]| Flag | Short | Description |
|---|---|---|
--output | -o | Output file path (default: seedance_<id>.mp4) |
---
seedance list — View Task History
seedance list [OPTIONS]| Flag | Short | Default | Description |
|---|---|---|---|
--limit | -n | 20 | Number of tasks |
--status | Filter by status | ||
--json | false | JSON output |
---
seedance cleanup — Clean Up TOS Temp Files
Delete expired TOS temporary files (those uploaded during extend or generate --video). Each uploaded file carries a x-amz-meta-expire-at metadata header set to 8 hours after upload. This command lists and deletes all objects under the seedance-cli/ prefix.
seedance cleanupRequires TOS env vars (TOS_ACCESS_KEY, TOS_SECRET_KEY, TOS_BUCKET). Safe to run anytime — only deletes temporary uploads, never user data.
Tip: Add to crontab for automatic cleanup:
```bash
0 /4 seedance cleanup
```
Auto-cleanup on `--wait`: When extend --wait completes successfully, source video temp files are deleted immediately — no need to run cleanup for those.
---
seedance config — Manage Configuration
seedance config init # Interactive setup wizard
seedance config show # Display all settings
seedance config get <KEY> # Get a single value
seedance config set <KEY> <VALUE> # Set a single valueAvailable keys: api_key, base_url, model, resolution, ratio, duration, output_dir.
---
Prompt Engineering Guide
Seedance 2.0 internally separates spatial layer (what's in frame) from temporal layer (how things change over time). Good prompts are engineering directives, not literary descriptions.
Reference Syntax
| Syntax | Usage |
|---|---|
@图片N / @视频N / @音频N | Asset references (numbered by CLI --image/-s/--audio order, starting from 1) |
<主体N>@图片N | Bind a subject to its reference image |
将 @图片N 中的[特征]定义为 <主体N> | Define reusable subject label (best for multi-scene) |
- Never use raw asset IDs in action descriptions.
- Always separate
@图片Nfrom following verbs with a noun: wrong@图片1跑向…, right<主体1>@图片1 跑向….
Task Classification
| Type | Use when | Prompt pattern |
|---|---|---|
| Reference | Motion/style/character transfer | 参考 @图片N 中的<主体N>,生成… |
| Edit | Local replacement, removal, modification | 严格编辑 @视频1,将其中的<原特征>修改为<新特征> |
| Extend | Continue storyline, bridge clips | 向后延长 @视频1,生成… / @视频1,<过渡>,接@视频2 |
| Compose | Reference one asset, edit another | 参考 @图片1 的[维度],严格编辑 @视频2 |
⚠️ Edit/extend tasks: use@视频Ndirectly, NOT参考 @视频N— the latter is treated as a reference task.
Eight Core Elements
1. Subject — who/what, identity (use <主体N>)
2. Action — verb + physics consequence, body-part detail + degree quantified
3. Scene — environment, lighting, time of day
4. Lighting — color temperature, quality, direction
5. Camera — ONE move only (push/pull/pan/track/fixed/follow)
6. Style — ONE primary style anchor (film/realistic/anime/cyberpunk)
7. Quality — resolution, detail level, texture
8. Constraints — watermark/logo/subtitle suppression, stability, clone preventionTwo Output Paths
Path A — Simple (one paragraph): For single-shot, edit, extend, move tasks. One flowing paragraph with inline constraints.
[Task pattern], [subject + asset binding], [scene + brief action], [style + constraint pack]Path B — Complex (three paragraphs): For ≥2 multi-scene narrative sequences. Must be three complete paragraphs: 1. Overall setting + subject definitions — atmosphere, all <主体N> bindings, camera references 2. Scene breakdown — 镜头1 / 镜头2 / 镜头3 …, each with camera→action→position→audio. One camera move per shot. NO absolute timestamps (0–3s won't work). 3. Style + constraint pack — quality, stability, subtitle/watermark suppression, clone prevention
Default Constraint Pack (always append)
画面稳定无变形,人物面部稳定,五官清晰,动作连贯自然,不僵硬,无穿模无卡顿。
保持无字幕,不要生成水印,不要生成 Logo。
高清电影质感,色彩自然,光影柔和。For multi-character scenes, add: 禁止出现双胞胎/同款分身,同画面仅保留单个对应人物。
Critical Don'ts
- ❌ Negative prompts — describe what you WANT, not what you don't want
- ❌ Absolute timestamps (
0–3s) — Seedance 2.0 doesn't reliably follow them - ❌ Multiple camera moves in one shot — pick ONE per shot
- ❌ High-impact dynamics (sprinting, big jumps, violent tumbles) — prefer slow, continuous micro-movements
- ❌ Abstract emotion words — externalize as physical details (sad → shoulders trembling, eyes reddening)
---
Workflow Patterns
Text-to-Video (T2V)
seedance generate "A glass perfume bottle on white marble. Smooth 360-degree orbit camera. Soft studio key light." \
--duration 8 --ratio 16:9 --waitImage-to-Video (I2V)
seedance generate "Character walks forward slowly, wind blows hair" \
--first-frame character_pose.png --duration 5 --waitReference-to-Video (R2V) with Multiple Images
seedance generate "Character A throws a punch at Character B" \
--image charA.png --image charB.png --duration 8 --waitVideo-to-Video (V2V) with Style Transfer
seedance generate "Match the camera movement and editing style from reference" \
--video reference_clip.mp4 --image character.png --duration 10 --waitAudio-Driven Generation
seedance generate "Character speaks directly to camera, medium close-up, locked" \
--audio dialogue.mp3 --image character.png --audio-gen --duration 8 --waitMusic Beat-Sync
seedance generate "Scene images transition on musical downbeats, energetic pacing" \
--image scene1.jpg --image scene2.jpg --image scene3.jpg \
--audio music_track.mp3 --audio-gen --duration 10 --waitVideo Extension (Forward) — Shortcut
seedance extend -s source.mp4 "角色缓步走出房间,镜头跟随" --duration 8 --wait
# Equivalent base-layer command:
seedance generate "向后延长视频1,角色缓步走出房间,镜头跟随" \
--video source.mp4 --duration 8 --waitVideo Extension (Multi-clip Bridging) — Shortcut
seedance extend -s clip1.mp4 -s clip2.mp4 -s clip3.mp4 \
"视频1中拱形窗户打开,进入室内,接视频2,镜头进入画内,接视频3" \
--duration 8 --audio-gen --waitVideo Editing — Shortcut
seedance edit cgt-abc123 "将视频1礼盒中的香水替换成图片1中的面霜,运镜不变" \
--image cream.jpg --duration 5 --audio-gen --wait
# Equivalent base-layer command:
seedance generate "将视频1礼盒中的香水替换成图片1中的面霜,运镜不变" \
--video original.mp4 --image cream.jpg --duration 5 --audio-gen --waitChain Generation — Using Extend
seedance generate "开场:日出照亮山脉" --wait -o opening.mp4
seedance extend -s opening.mp4 "中段:城市苏醒,车流涌动" --wait -o middle.mp4
seedance extend -s middle.mp4 "结尾:人潮中一个女孩回头微笑" --wait -o ending.mp4First + Last Frame (I2V with Anchors)
seedance generate "角色从站立过渡到奔跑姿势" \
--first-frame pose_start.png --last-frame pose_end.png \
--duration 5 --waitWeb Search (Text-only)
seedance generate "微距镜头对准叶片上翠绿的玻璃蛙,焦点从皮肤转移到透明腹部" \
--web-search --duration 11 --waitVirtual Avatar
seedance generate "图片1中美妆博主面带笑容,向镜头介绍图片2中的面霜" \
--image "asset://asset-20260401123823-6d4x2" --image product.jpg \
--audio-gen --ratio adaptive --duration 11 --waitOffline Inference
seedance generate "A cinematic landscape shot" \
--service-tier flex --duration 10 --waitPrompt from File
# Write a complex prompt in a text file
echo '古风仙侠场景,白衣剑客凌空而起,剑光如虹划过夜空,远山云海翻涌。升格慢动作,仰拍视角。' > prompt.txt
seedance generate @prompt.txt --duration 10 --ratio 16:9 --waitBatch Generation with Seed Variation
for seed in 1000 1001 1002 1003 1004; do
seedance generate "Sunset over ocean, golden light, slow pan right" \
--seed $seed --duration 5 -q
doneFire-and-Forget + Later Download
# Submit task (returns immediately)
TASK_ID=$(seedance generate "A dramatic scene" -q)
# ... do other work ...
# Check status later
seedance status $TASK_ID
# Download when ready
seedance download $TASK_ID -o final_output.mp4---
CI / Script Integration
Use --quiet, --json, and --strict for automation:
# CI pipeline: generate, wait, fail on timeout
TASK_ID=$(seedance generate "Product ad scene" --wait --strict --timeout 600 -q)
# JSON output for parsing
seedance status $TASK_ID --json | jq '.status'
# List recent failures
seedance list --status failed --json | jq '.[].task_id'---
Task States
| Status | Terminal | Description |
|---|---|---|
submitted | No | Task received by server |
queued | No | Waiting in generation queue |
running | No | Video is being generated |
succeeded | Yes | Generation complete |
failed | Yes | Generation failed |
expired | Yes | Task result expired on server |
cancelled | Yes | Task was cancelled |
---
Exit Codes
| Code | Meaning |
|---|---|
0 | Success |
1 | Error (API failure, invalid args, etc) |
2 | Timeout (only with --strict) |
---
Agent Gotchas
1. Always `--wait` for one-shot workflows. Without it, generate returns immediately with just a task_id. The video isn't ready yet. 2. Use `-q` for scripting. Quiet mode outputs only the task_id (on generate) or file path (on download), nothing else. 3. Local files auto-upload. Pass local paths to --image, --video, --audio — the CLI handles base64 encoding. No manual upload step needed. 4. **@file.txt for long prompts. Chinese prompts with special characters are easier to manage in a file. 5. `--strict for CI.** Without it, timeout is a soft warning (exit 0). With it, timeout exits 2 so your pipeline catches it. 6. **Seed for reproducibility.** Same seed + same prompt + same model = same output. Use for A/B testing and iteration. 7. **Config cascade:** ARK_API_KEY env var overrides config.toml. Useful for CI where you set secrets via env. 8. **Rule of 12:** Total files (images + videos + audios + first_frame + last_frame) cannot exceed 12. CLI validates this before sending. 9. **Duration range is 4–15 seconds.** CLI rejects values outside this range. 10. **Audio must be MP3.** Other formats fail silently on the server side. Convert before passing to --audio. 11. **Prefer extend/edit shortcuts over raw generate** for extension and editing tasks. extend auto-trims source videos that exceed min(5s, --duration) and uploads them as base64. edit auto-resolves task IDs to video URLs. Use generate with --video only for raw video-to-video generation. 12. **Video extension is prompt-driven.** The model understands extend/edit/bridge semantics from the prompt text. Both extend/edit and raw generate --video rely on this — no special API flag exists. 13. **--web-search only works with text-only input.** Cannot combine with --image, --video, or --audio. 14. **asset:// for virtual avatars.** Use asset://<asset-id> with --image/--video/--audio`. Only works with assets from the same Volcengine account within 30 days. 15. Prompt references use "素材类型+序号" format. In Chinese prompts, refer to inputs as 图片1, 视频1, 音频1 (numbered by order within their type in the content array). Do NOT use asset IDs in prompt text.
# CODEOWNERS — seedance-20 skill library
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
#
# All files owned by Emily (@iamemily2050)
# Pull requests touching these paths will automatically request her review.
# Global fallback — all files
* @Emily2040
# Root skill
/SKILL.md @Emily2040
# All sub-skills
/skills/ @Emily2040
# References
/references/ @Emily2040
# Repo metadata
/LICENSE @Emily2040
/README.md @Emily2040
/CHANGELOG.md @Emily2040
/.github/ @Emily2040
name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-apple-darwin
os: macos-latest
- target: aarch64-apple-darwin
os: macos-latest
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
- target: aarch64-pc-windows-msvc
os: windows-latest
runs-on: ${{ matrix.os }}
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
run: |
rustup target add ${{ matrix.target }}
- name: Install cross (Linux ARM64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: cargo install cross --git https://github.com/cross-rs/cross
- name: Build (cross)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: cross build --release --target ${{ matrix.target }}
- name: Build (native)
if: matrix.target != 'aarch64-unknown-linux-gnu'
run: cargo build --release --target ${{ matrix.target }}
- name: Get version from tag
id: version
shell: bash
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Package (Unix)
if: runner.os != 'Windows'
shell: bash
run: |
BINARY="target/${{ matrix.target }}/release/seedance"
ARCHIVE="seedance-v${{ steps.version.outputs.version }}-${{ matrix.target }}.tar.gz"
tar -czf "$ARCHIVE" -C "$(dirname "$BINARY")" "$(basename "$BINARY")"
echo "ARCHIVE=$ARCHIVE" >> "$GITHUB_ENV"
- name: Package (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$binary = "target/${{ matrix.target }}/release/seedance.exe"
$archive = "seedance-v${{ steps.version.outputs.version }}-${{ matrix.target }}.zip"
Compress-Archive -Path $binary -DestinationPath $archive
echo "ARCHIVE=$archive" >> $env:GITHUB_ENV
- name: Upload release asset
uses: softprops/action-gh-release@v2
with:
files: ${{ env.ARCHIVE }}
publish-npm:
needs: build
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '24'
registry-url: 'https://registry.npmjs.org'
- name: Publish to npm
run: npm publish --access public
/target
/bin
node_modules
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "ahash"
version = "0.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
"zerocopy",
]
[[package]]
name = "android_system_properties"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
dependencies = [
"libc",
]
[[package]]
name = "anstream"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"is_terminal_polyfill",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
[[package]]
name = "anstyle-parse"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
"windows-sys 0.61.2",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
"windows-sys 0.61.2",
]
[[package]]
name = "anyhow"
version = "1.0.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]]
name = "atomic-waker"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
[[package]]
name = "autocfg"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bitflags"
version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
[[package]]
name = "block-buffer"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
"generic-array",
]
[[package]]
name = "bumpalo"
version = "3.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
[[package]]
name = "bytes"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
[[package]]
name = "cc"
version = "1.2.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
dependencies = [
"find-msvc-tools",
"shlex",
]
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "cfg_aliases"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chrono"
version = "0.4.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
dependencies = [
"iana-time-zone",
"js-sys",
"num-traits",
"wasm-bindgen",
"windows-link",
]
[[package]]
name = "clap"
version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
dependencies = [
"clap_builder",
"clap_derive",
]
[[package]]
name = "clap_builder"
version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
dependencies = [
"anstream",
"anstyle",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]]
name = "colorchoice"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
[[package]]
name = "console"
version = "0.15.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
dependencies = [
"encode_unicode",
"libc",
"once_cell",
"unicode-width",
"windows-sys 0.59.0",
]
[[package]]
name = "core-foundation-sys"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "cpufeatures"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
"libc",
]
[[package]]
name = "crypto-common"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
dependencies = [
"generic-array",
"typenum",
]
[[package]]
name = "dialoguer"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
dependencies = [
"console",
"shell-words",
"tempfile",
"thiserror 1.0.69",
"zeroize",
]
[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
"subtle",
]
[[package]]
name = "dirs"
version = "5.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
dependencies = [
"dirs-sys",
]
[[package]]
name = "dirs-sys"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
dependencies = [
"libc",
"option-ext",
"redox_users",
"windows-sys 0.48.0",
]
[[package]]
name = "displaydoc"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "encode_unicode"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
[[package]]
name = "equivalent"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "errno"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys 0.61.2",
]
[[package]]
name = "fallible-iterator"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
[[package]]
name = "fallible-streaming-iterator"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
[[package]]
name = "fastrand"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
[[package]]
name = "find-msvc-tools"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "form_urlencoded"
version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
dependencies = [
"percent-encoding",
]
[[package]]
name = "futures-channel"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
[[package]]
name = "futures-io"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
[[package]]
name = "futures-macro"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "futures-sink"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
[[package]]
name = "futures-task"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
[[package]]
name = "futures-util"
version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
dependencies = [
"futures-core",
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
"memchr",
"pin-project-lite",
"slab",
]
[[package]]
name = "generic-array"
version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
]
[[package]]
name = "getrandom"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
dependencies = [
"cfg-if",
"js-sys",
"libc",
"wasi",
"wasm-bindgen",
]
[[package]]
name = "getrandom"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if",
"js-sys",
"libc",
"r-efi 5.3.0",
"wasip2",
"wasm-bindgen",
]
[[package]]
name = "getrandom"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
dependencies = [
"cfg-if",
"libc",
"r-efi 6.0.0",
"wasip2",
"wasip3",
]
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
dependencies = [
"ahash",
]
[[package]]
name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
"foldhash",
]
[[package]]
name = "hashbrown"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
[[package]]
name = "hashlink"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"
dependencies = [
"hashbrown 0.14.5",
]
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hmac"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
dependencies = [
"digest",
]
[[package]]
name = "http"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
dependencies = [
"bytes",
"itoa",
]
[[package]]
name = "http-body"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
"http",
]
[[package]]
name = "http-body-util"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
dependencies = [
"bytes",
"futures-core",
"http",
"http-body",
"pin-project-lite",
]
[[package]]
name = "httparse"
version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
[[package]]
name = "hyper"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
dependencies = [
"atomic-waker",
"bytes",
"futures-channel",
"futures-core",
"http",
"http-body",
"httparse",
"itoa",
"pin-project-lite",
"smallvec",
"tokio",
"want",
]
[[package]]
name = "hyper-rustls"
version = "0.27.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
dependencies = [
"http",
"hyper",
"hyper-util",
"rustls",
"tokio",
"tokio-rustls",
"tower-service",
"webpki-roots",
]
[[package]]
name = "hyper-util"
version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
dependencies = [
"base64",
"bytes",
"futures-channel",
"futures-util",
"http",
"http-body",
"hyper",
"ipnet",
"libc",
"percent-encoding",
"pin-project-lite",
"socket2",
"tokio",
"tower-service",
"tracing",
]
[[package]]
name = "iana-time-zone"
version = "0.1.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"log",
"wasm-bindgen",
"windows-core",
]
[[package]]
name = "iana-time-zone-haiku"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
dependencies = [
"cc",
]
[[package]]
name = "icu_collections"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
dependencies = [
"displaydoc",
"potential_utf",
"utf8_iter",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
name = "icu_locale_core"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
dependencies = [
"displaydoc",
"litemap",
"tinystr",
"writeable",
"zerovec",
]
[[package]]
name = "icu_normalizer"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
dependencies = [
"icu_collections",
"icu_normalizer_data",
"icu_properties",
"icu_provider",
"smallvec",
"zerovec",
]
[[package]]
name = "icu_normalizer_data"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
[[package]]
name = "icu_properties"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
dependencies = [
"icu_collections",
"icu_locale_core",
"icu_properties_data",
"icu_provider",
"zerotrie",
"zerovec",
]
[[package]]
name = "icu_properties_data"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
[[package]]
name = "icu_provider"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
dependencies = [
"displaydoc",
"icu_locale_core",
"writeable",
"yoke",
"zerofrom",
"zerotrie",
"zerovec",
]
[[package]]
name = "id-arena"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
[[package]]
name = "idna"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
dependencies = [
"idna_adapter",
"smallvec",
"utf8_iter",
]
[[package]]
name = "idna_adapter"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
dependencies = [
"icu_normalizer",
"icu_properties",
]
[[package]]
name = "indexmap"
version = "2.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
dependencies = [
"equivalent",
"hashbrown 0.17.0",
"serde",
"serde_core",
]
[[package]]
name = "indicatif"
version = "0.17.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
dependencies = [
"console",
"number_prefix",
"portable-atomic",
"unicode-width",
"web-time",
]
[[package]]
name = "ipnet"
version = "2.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
[[package]]
name = "iri-string"
version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20"
dependencies = [
"memchr",
"serde",
]
[[package]]
name = "is_terminal_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "itoa"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "js-sys"
version = "0.3.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca"
dependencies = [
"cfg-if",
"futures-util",
"once_cell",
"wasm-bindgen",
]
[[package]]
name = "leb128fmt"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "libc"
version = "0.2.185"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
[[package]]
name = "libredox"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
dependencies = [
"libc",
]
[[package]]
name = "libsqlite3-sys"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f"
dependencies = [
"cc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "linux-raw-sys"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
[[package]]
name = "litemap"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
[[package]]
name = "lock_api"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
dependencies = [
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "lru-slab"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
[[package]]
name = "memchr"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "mio"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
dependencies = [
"libc",
"wasi",
"windows-sys 0.61.2",
]
[[package]]
name = "num-traits"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
[[package]]
name = "number_prefix"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
[[package]]
name = "once_cell"
version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "once_cell_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "option-ext"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]]
name = "parking_lot"
version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.9.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
"windows-link",
]
[[package]]
name = "percent-encoding"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "pin-project-lite"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
[[package]]
name = "pkg-config"
version = "0.3.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
[[package]]
name = "portable-atomic"
version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
[[package]]
name = "potential_utf"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
dependencies = [
"zerovec",
]
[[package]]
name = "ppv-lite86"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
]
[[package]]
name = "prettyplease"
version = "0.2.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
"syn",
]
[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quinn"
version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
dependencies = [
"bytes",
"cfg_aliases",
"pin-project-lite",
"quinn-proto",
"quinn-udp",
"rustc-hash",
"rustls",
"socket2",
"thiserror 2.0.18",
"tokio",
"tracing",
"web-time",
]
[[package]]
name = "quinn-proto"
version = "0.11.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
dependencies = [
"bytes",
"getrandom 0.3.4",
"lru-slab",
"rand",
"ring",
"rustc-hash",
"rustls",
"rustls-pki-types",
"slab",
"thiserror 2.0.18",
"tinyvec",
"tracing",
"web-time",
]
[[package]]
name = "quinn-udp"
version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
dependencies = [
"cfg_aliases",
"libc",
"once_cell",
"socket2",
"tracing",
"windows-sys 0.59.0",
]
[[package]]
name = "quote"
version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [
"proc-macro2",
]
[[package]]
name = "r-efi"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "r-efi"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "rand"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
dependencies = [
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
dependencies = [
"getrandom 0.3.4",
]
[[package]]
name = "redox_syscall"
version = "0.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
dependencies = [
"bitflags",
]
[[package]]
name = "redox_users"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
dependencies = [
"getrandom 0.2.17",
"libredox",
"thiserror 1.0.69",
]
[[package]]
name = "reqwest"
version = "0.12.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
dependencies = [
"base64",
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"http-body-util",
"hyper",
"hyper-rustls",
"hyper-util",
"js-sys",
"log",
"percent-encoding",
"pin-project-lite",
"quinn",
"rustls",
"rustls-pki-types",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"tokio",
"tokio-rustls",
"tokio-util",
"tower",
"tower-http",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-streams",
"web-sys",
"webpki-roots",
]
[[package]]
name = "ring"
version = "0.17.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
"cc",
"cfg-if",
"getrandom 0.2.17",
"libc",
"untrusted",
"windows-sys 0.52.0",
]
[[package]]
name = "rusqlite"
version = "0.31.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae"
dependencies = [
"bitflags",
"fallible-iterator",
"fallible-streaming-iterator",
"hashlink",
"libsqlite3-sys",
"smallvec",
]
[[package]]
name = "rustc-hash"
version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
[[package]]
name = "rustix"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
"bitflags",
"errno",
"libc",
"linux-raw-sys",
"windows-sys 0.61.2",
]
[[package]]
name = "rustls"
version = "0.23.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21"
dependencies = [
"once_cell",
"ring",
"rustls-pki-types",
"rustls-webpki",
"subtle",
"zeroize",
]
[[package]]
name = "rustls-pki-types"
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
dependencies = [
"web-time",
"zeroize",
]
[[package]]
name = "rustls-webpki"
version = "0.103.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
dependencies = [
"ring",
"rustls-pki-types",
"untrusted",
]
[[package]]
name = "rustversion"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "ryu"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
[[package]]
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "seedance-cli"
version = "0.1.2"
dependencies = [
"anyhow",
"base64",
"chrono",
"clap",
"console",
"dialoguer",
"dirs",
"futures-util",
"hex",
"hmac",
"indicatif",
"reqwest",
"rusqlite",
"serde",
"serde_json",
"sha2",
"tempfile",
"thiserror 2.0.18",
"tokio",
"toml",
"url",
"uuid",
]
[[package]]
name = "semver"
version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
[[package]]
name = "serde"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [
"serde_core",
"serde_derive",
]
[[package]]
name = "serde_core"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
dependencies = [
"itoa",
"memchr",
"serde",
"serde_core",
"zmij",
]
[[package]]
name = "serde_spanned"
version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
"itoa",
"ryu",
"serde",
]
[[package]]
name = "sha2"
version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "shell-words"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77"
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signal-hook-registry"
version = "1.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
dependencies = [
"errno",
"libc",
]
[[package]]
name = "slab"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
[[package]]
name = "smallvec"
version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
name = "socket2"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
dependencies = [
"libc",
"windows-sys 0.61.2",
]
[[package]]
name = "stable_deref_trait"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "subtle"
version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "sync_wrapper"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
dependencies = [
"futures-core",
]
[[package]]
name = "synstructure"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tempfile"
version = "3.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
dependencies = [
"fastrand",
"getrandom 0.4.2",
"once_cell",
"rustix",
"windows-sys 0.61.2",
]
[[package]]
name = "thiserror"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl 1.0.69",
]
[[package]]
name = "thiserror"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
dependencies = [
"thiserror-impl 2.0.18",
]
[[package]]
name = "thiserror-impl"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "thiserror-impl"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tinystr"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
dependencies = [
"displaydoc",
"zerovec",
]
[[package]]
name = "tinyvec"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3"
dependencies = [
"tinyvec_macros",
]
[[package]]
name = "tinyvec_macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.52.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"
dependencies = [
"bytes",
"libc",
"mio",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
"socket2",
"tokio-macros",
"windows-sys 0.61.2",
]
[[package]]
name = "tokio-macros"
version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tokio-rustls"
version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
dependencies = [
"rustls",
"tokio",
]
[[package]]
name = "tokio-util"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"pin-project-lite",
"tokio",
]
[[package]]
name = "toml"
version = "0.8.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"toml_write",
"winnow",
]
[[package]]
name = "toml_write"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
[[package]]
name = "tower"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
dependencies = [
"futures-core",
"futures-util",
"pin-project-lite",
"sync_wrapper",
"tokio",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-http"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
dependencies = [
"bitflags",
"bytes",
"futures-util",
"http",
"http-body",
"iri-string",
"pin-project-lite",
"tower",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-layer"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
[[package]]
name = "tower-service"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
[[package]]
name = "tracing"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
dependencies = [
"pin-project-lite",
"tracing-core",
]
[[package]]
name = "tracing-core"
version = "0.1.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
dependencies = [
"once_cell",
]
[[package]]
name = "try-lock"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "typenum"
version = "1.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "unicode-width"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
[[package]]
name = "unicode-xid"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "untrusted"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
version = "2.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
"serde",
]
[[package]]
name = "utf8_iter"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
[[package]]
name = "utf8parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.23.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
dependencies = [
"getrandom 0.4.2",
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "vcpkg"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "version_check"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "want"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
dependencies = [
"try-lock",
]
[[package]]
name = "wasi"
version = "0.11.1+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasip2"
version = "1.0.3+wasi-0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
dependencies = [
"wit-bindgen 0.57.1",
]
[[package]]
name = "wasip3"
version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
"wit-bindgen 0.51.0",
]
[[package]]
name = "wasm-bindgen"
version = "0.2.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904"
dependencies = [
"bumpalo",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129"
dependencies = [
"unicode-ident",
]
[[package]]
name = "wasm-encoder"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
dependencies = [
"leb128fmt",
"wasmparser",
]
[[package]]
name = "wasm-metadata"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
dependencies = [
"anyhow",
"indexmap",
"wasm-encoder",
"wasmparser",
]
[[package]]
name = "wasm-streams"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
dependencies = [
"futures-util",
"js-sys",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
]
[[package]]
name = "wasmparser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
"bitflags",
"hashbrown 0.15.5",
"indexmap",
"semver",
]
[[package]]
name = "web-sys"
version = "0.3.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "web-time"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "webpki-roots"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d"
dependencies = [
"rustls-pki-types",
]
[[package]]
name = "windows-core"
version = "0.62.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
dependencies = [
"windows-implement",
"windows-interface",
"windows-link",
"windows-result",
"windows-strings",
]
[[package]]
name = "windows-implement"
version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "windows-interface"
version = "0.59.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-result"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-strings"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-sys"
version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-targets"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
"windows_aarch64_gnullvm 0.48.5",
"windows_aarch64_msvc 0.48.5",
"windows_i686_gnu 0.48.5",
"windows_i686_msvc 0.48.5",
"windows_x86_64_gnu 0.48.5",
"windows_x86_64_gnullvm 0.48.5",
"windows_x86_64_msvc 0.48.5",
]
[[package]]
name = "windows-targets"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
"windows_i686_gnullvm",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
dependencies = [
"memchr",
]
[[package]]
name = "wit-bindgen"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
dependencies = [
"wit-bindgen-rust-macro",
]
[[package]]
name = "wit-bindgen"
version = "0.57.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
[[package]]
name = "wit-bindgen-core"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck",
"wit-parser",
]
[[package]]
name = "wit-bindgen-rust"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
dependencies = [
"anyhow",
"heck",
"indexmap",
"prettyplease",
"syn",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
]
[[package]]
name = "wit-bindgen-rust-macro"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
dependencies = [
"anyhow",
"prettyplease",
"proc-macro2",
"quote",
"syn",
"wit-bindgen-core",
"wit-bindgen-rust",
]
[[package]]
name = "wit-component"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
"bitflags",
"indexmap",
"log",
"serde",
"serde_derive",
"serde_json",
"wasm-encoder",
"wasm-metadata",
"wasmparser",
"wit-parser",
]
[[package]]
name = "wit-parser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
dependencies = [
"anyhow",
"id-arena",
"indexmap",
"log",
"semver",
"serde",
"serde_derive",
"serde_json",
"unicode-xid",
"wasmparser",
]
[[package]]
name = "writeable"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
[[package]]
name = "yoke"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
dependencies = [
"stable_deref_trait",
"yoke-derive",
"zerofrom",
]
[[package]]
name = "yoke-derive"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
dependencies = [
"proc-macro2",
"quote",
"syn",
"synstructure",
]
[[package]]
name = "zerocopy"
version = "0.8.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "zerofrom"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df"
dependencies = [
"zerofrom-derive",
]
[[package]]
name = "zerofrom-derive"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
dependencies = [
"proc-macro2",
"quote",
"syn",
"synstructure",
]
[[package]]
name = "zeroize"
version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
[[package]]
name = "zerotrie"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
dependencies = [
"displaydoc",
"yoke",
"zerofrom",
]
[[package]]
name = "zerovec"
version = "0.11.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
dependencies = [
"yoke",
"zerofrom",
"zerovec-derive",
]
[[package]]
name = "zerovec-derive"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "zmij"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
[package]
name = "seedance-cli"
version = "0.1.3"
edition = "2021"
description = "CLI for Seedance 2.0 video generation on Volcengine Ark"
[[bin]]
name = "seedance"
path = "src/main.rs"
[dependencies]
clap = { version = "4", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.8"
rusqlite = { version = "0.31", features = ["bundled"] }
indicatif = "0.17"
console = "0.15"
dialoguer = "0.11"
dirs = "5"
base64 = "0.22"
url = "2"
thiserror = "2"
anyhow = "1"
chrono = "0.4"
futures-util = "0.3"
hmac = "0.12"
sha2 = "0.10"
hex = "0.4"
uuid = { version = "1", features = ["v4"] }
[dev-dependencies]
tempfile = "3"
Changelog — seedance-20
All notable changes to this project are documented here. Format follows Keep a Changelog. Versioning follows Semantic Versioning.
---
[5.0.0] — 2026-03-03
Added
- Intent-First Philosophy — The entire library now prioritizes intent-based prompting over precision-based micro-management. New governing rule: "Direct the model. Don't micro-manage it."
- 4 new reference files:
references/genre-guides.md— 7-genre prompt templates (Product, Lifestyle, Drama, Music Video, Landscape, Commercial, Anime).references/reference-workflow.md— Complete@referencesystem guide (Image, Video, Audio, Material tags).references/i2v-guide.md— Image-to-Video best practices: motion-only prompts, common mistakes.references/intent-vs-precision.md— The philosophical shift from precision to intent.
Changed
- `seedance-prompt` (P0 rewrite) — Replaced Concealment Check with Director's Formula: genre router, 30-100 word target, I2V gate, anti-slop check.
- `seedance-motion` (P0 restructure) — Replaced micro-choreography with intent-first motion: degree adverbs, physics consequences,
@Videoreference as primary tool. - `seedance-camera` (P1 update) — Added One-Move Rule as governing principle, genre-based camera presets, camera transfer via
@Video. - `seedance-recipes` (P1 expansion) — Expanded from cinematic-only to 7 content categories with templates.
- `seedance-interview` (P1 update) — Added Quick Mode exit for users with strong references, genre detection from
genre-guides. - `seedance-interview-short` (P1 update) — Aligned with 30-100 word target, added genre and reference fields.
- `seedance-troubleshoot` (P1 update) — Replaced Conservation Law with practical 5-step diagnostic tree.
- `seedance-prompt-short` (P2 update) — Aligned budget table with 30-100 word target.
- `seedance-style` (P2 update) — Changed style budget from "2-3 tokens" to "ONE primary style anchor."
- `seedance-vfx` (P2 update) — Added intent-first framing to FX contract.
- `seedance-audio` (P2 update) — Added natural language sound description guidance.
- Root
SKILL.md,README.md,CHANGELOG.md,quick-ref.mdupdated for v5.0.0.
---
[4.2.0] — 2026-03-03
Added
- Safe Vocabulary Integration — Added filter-safe action, weapon, clothing, body, environment, material, VFX, sound, and production-context vocabulary to
seedance-filterand all 5 language vocabulary skills. - Term counts expanded:
vocab-zh550+,vocab-ja450+,vocab-ko450+,vocab-es450+,vocab-ru450+. - New categories per language: Safe Action & Combat, Safe Weapon, Safe Clothing & Armor, Safe Body & Physique, VFX Particles & Energy, Diegetic Audio, Safe Environment, Material & Surface, Production Context Tokens.
Changed
- Root
SKILL.mdversion bumped to4.2.0with2026-03-03date. README.mdupdated: version badge4.2.0, term counts, architecture tree (23 sub-skills), compliance count.- All 5 vocabulary sub-skills bumped to
4.2.0. seedance-filtersafe vocabulary database appended as master English reference.
---
[4.1.0] — 2026-03-02
Added
- New `seedance-filter` skill — Content filter intelligence module. Explains how the Seedance 2.0 content filter evaluates prompts (language-model-based intent assessment, not keyword matching), documents the 37% false-positive block rate, and provides actionable techniques: four-question framework, high-risk word avoidance, image upload best practices, Chinese prompt trick, and professional-language framing.
Changed
- Root
SKILL.mdversion bumped to4.1.0with2026-03-02date. README.mdupdated: version badge4.1.0, skill count23, Content Quality table includesseedance-filter.CHANGELOG.mdupdated with this entry.references/quick-ref.mdskill map updated to includeseedance-filter.
---
[4.0.0] — 2026-02-28
Added
- Cognitive Architecture Upgrade — Three core skills redesigned using cognitive opcodes inspired by agi-in-md.
seedance-interviewL8 Construction-First: AI builds a "Safe" draft immediately, then asks the user to "attack" it. The user's attack reveals the true creative intent — the "cinematic friction" — which becomes the foundation of the final prompt.seedance-promptL7 Concealment Check: Before building a prompt, the AI scans for "concealment words" (beautiful, stunning, epic) that hide a lack of specific visual information. Each is deconstructed and replaced with measurable, observable detail.seedance-troubleshootL11 Conservation Law: When a prompt consistently fails, the AI identifies the fundamental trade-off (e.g., Detail × Motion = Constant) and "inverts" the design to find a creative escape route.- Storytelling Framework Reference — Added
references/storytelling-framework.mdwith narrative design, visual layering, and director's toolkit principles.
Changed
- Root
SKILL.mdversion bumped to4.0.0. - All 22 sub-skill
SKILL.mdfiles synchronized to4.0.0with2026-02-28date. README.mdupdated: version badge, skill descriptions, architecture tree, and CHANGELOG reference.
---
[3.8.0] — 2026-02-27
Added
- Dual Workflow System: Two distinct prompt engineering workflows now available.
seedance-prompt-short: New short-form prompt skill with hard 2000-character budget and Compression Engine (4 rules: Verbs > Adjectives, Show Don't Tell, Film Language, Trust the Model).seedance-interview-short: New short-form interview skill with live character counter and Director's Notes + Compression Log in final output.- Field Note: Added practitioner note that Seedance V2 performs best with short (<2000 char) Chinese prompts in
README.mdand rootSKILL.md. - README: New "Two Workflows: Max Detail vs. Max Performance" section with comparison table. Sub-skill count updated to 22.
Preserved
seedance-promptandseedance-interview(Max Detail, Long Form) fully intact.
---
[3.7.0] — 2026-02-26
Changed
- Redesigned
seedance-interviewas "The Director's Journey" — a multi-stage storytelling workflow (Vision → Narrative → Visuals → Technical → Final Brief). - Replaced the A/B/C/D/E guided stages with creative "Director's Questions" for deeper narrative extraction.
- Added
references/storytelling-framework.md— professional cinematography and narrative design principles. - Updated root
SKILL.mdto v3.7.0 with storytelling-framework reference and interview in core pipeline. - Updated README.md: version badge, interview emoji 🎭, skill count 20, references count 5.
[3.6.1] — 2026-02-26
Added
- New `seedance-examples-zh` skill — 16 production-ready Chinese prompt examples across 7 genres (Short Drama, Advertising, Animation, Product, VFX, Cinematography, Beat Sync).
- Enhanced Chinese Vocabulary — Expanded
seedance-vocab-zhto 400+ terms across 16 categories, including new "Theme & Style" and "Prompt-Ready Phrases". - Official Platform Links — Added official website links for all 10 supported platforms (Antigravity, Gemini CLI, Firebase Studio, Claude Code, OpenClaw, GitHub Copilot, Codex, Cursor, Windsurf, OpenCode) in
README.md. - Author Social Links — Added clickable 𝕏 and IG links for Emily (@iamemily2050) in
README.mdandSKILL.md.
Changed
- Universal Version Sync — All 21
SKILL.mdfiles synchronized tov3.6.1with updated2026-02-26metadata. - README Refinement — Updated version/skill badges, fixed architecture tree flags, and added "Working Examples" collapsible section.
- Platform Constraints — Updated
platform-constraints.mdwith latest Feb 26 verification and API status.
---
[3.6.0] — 2026-02-25
Added
- Full cross-platform support — Antigravity, Gemini CLI, Firebase Studio, Codex, Cursor, Windsurf, OpenCode declared in all 20
SKILL.mdfiles viatagsandmetadataplatform blocks. tags:array added to all 19 sub-skill files (previously missing entirely).metadata.antigravity,metadata.gemini-cli,metadata.firebaseblocks added to all relevant skills.- Platform Compatibility table injected into root
SKILL.mdbody with install paths and one-liner install commands for all 10 supported platforms. seedance-pipelinetagged withfirebasefor Firebase Studio pipeline integration.- Author attribution: Emily (@iamemily2050) added across
LICENSE,README.md,CODEOWNERS, and rootSKILL.md. README.md— full GitHub-ready project README with install matrix, skill directory, and badges.LICENSE— MIT licence with correct copyright holder.CHANGELOG.md— this file..github/CODEOWNERS— ownership declarations.
Changed
metadata.homepageURLs updated from placeholdergithub.com/seedance-2.0togithub.com/Emily2040/seedance-2.0across all 20 files.- Root skill version bumped
3.5.0 → 3.6.0. seedance-audioversion bumped4.2.0 → 4.3.0.seedance-promptversion bumped3.3.0 → 3.4.0.seedance-troubleshootversion bumped3.4.0 → 3.5.0.
---
[3.5.0] — 2026-02-25
Added
- OpenClaw / ClawHub full compatibility (
user-invocable: true,user-invokable: trueon all 20 skills). metadata.openclawblocks with emoji and homepage on all 20 skills.metadata.parent: seedance-20on all 19 sub-skills.- Verb-first, single-quoted descriptions with WHEN trigger phrases on all 20 skills.
Fixed
- Illegal dot in root
namefield:seedance-2.0→seedance-20. - Non-standard top-level fields (
last-stress-tested,updated,last-updated) migrated intometadataJSON block. version:moved from top-level field intometadata.version.- All 19 sub-skills now explicitly declare
user-invocable: trueanduser-invokable: true.
---
[3.4.1] — 2026-02-25
Added
seedance-antislopskill: anti-slop and filler-language detection for prompt quality.seedance-copyrightskill: live Feb 2026 IP enforcement data (Disney, Paramount, MPA, SAG-AFTRA).seedance-interviewskill v4.0.0: guided A/B/C/D/E multi-stage pre-production workflow.- Multilingual vocabulary skills:
seedance-vocab-es,-ja,-ko,-ru,-zh.
Changed
- Root skill version bumped to
3.4.1. - Copyright skill updated with post-enforcement state (ByteDance face-upload pause Feb 15 2026).
---
[3.3.0] — 2026-02-25
Added
seedance-troubleshootv3.3.0 with QA checklist and emergency fixes.seedance-pipelinev3.1.0 with ComfyUI node workflows and post-processing chain.seedance-recipesv3.1.0 with genre-specific template recipes.
---
[3.2.1] — 2026-02-25
Fixed
- Audio skill desync documentation updated with multi-character constraints.
- Camera skill anti-drift lock section added.
---
[3.2.0] — 2026-02-25
Added
seedance-promptv3.2.0 with five-layer stack and@Tagdelegation levels 1–4.seedance-antislopv3.2.0.
---
[3.1.0] — 2026-02-25
Added
- Initial release of core pipeline skills:
seedance-audio, seedance-camera, seedance-motion, seedance-lighting, seedance-characters, seedance-style, seedance-vfx.
---
[3.0.0] — 2026-02-25
Added
- Initial Seedance 2.0 skill package creation.
- Root
SKILL.mdwith quad-modal AI filmmaking framework (T2V · I2V · V2V · R2V).
---
Maintained by [Emily (@iamemily2050)](https://github.com/Emily2040)
MIT License
Copyright (c) 2026 Emily (@iamemily2050)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
"name": "seedance",
"version": "0.1.3",
"description": "CLI for Seedance 2.0 video generation on Volcengine Ark",
"bin": {
"seedance": "scripts/run.js"
},
"scripts": {
"postinstall": "node scripts/install.js"
},
"os": [
"darwin",
"linux",
"win32"
],
"cpu": [
"x64",
"arm64"
],
"engines": {
"node": ">=16"
},
"repository": {
"type": "git",
"url": "git+https://github.com/vaxin/seedance-cli.git"
},
"keywords": [
"seedance",
"video",
"ai",
"bytedance",
"volcengine",
"ark",
"cli"
],
"author": "vaxin",
"license": "MIT",
"publishConfig": {
"access": "public"
},
"files": [
"scripts/install.js",
"scripts/run.js",
"README.md",
"LICENSE"
]
}
seedance
Seedance 2.0 AI 视频生成命令行工具,基于火山引擎 Ark 平台。
支持 Text-to-Video、Image-to-Video、Video-to-Video、Reference-to-Video 四种生成模式。
安装
npm install -g seedance为 AI Agent(Claude Code / Cursor / Codex 等)安装 Skill:
npx skills add vaxin/seedance-cli或从源码构建:
cargo install --path .安装后验证:
seedance --version快速开始
# 1. 配置 API Key(交互式)
seedance config init
# 2. 文生视频
seedance generate "夕阳下的湖面,金色光芒铺满水面,镜头缓缓后拉" --wait
# 3. 图生视频
seedance generate "角色缓步走来,风吹动发丝" \
--first-frame character.png --wait
# 4. 完整参数控制
seedance generate "产品瓶身置于大理石台面,缓慢环绕拍摄" \
--model standard --duration 8 --ratio 16:9 --resolution 1080p --wait命令一览
seedance generate — 创建视频
seedance generate <PROMPT> [OPTIONS]PROMPT 可以是字符串,也可以用 @file.txt 从文件读取。
生成参数
| 参数 | 短写 | 默认值 | 说明 |
|---|---|---|---|
--model | -m | standard | 模型:standard / fast |
--duration | -d | 5 | 时长 4–15 秒 |
--ratio | -r | 16:9 | 画面比例:16:9 9:16 4:3 3:4 21:9 1:1 |
--resolution | 1080p | 分辨率:480p 720p 1080p 2K | |
--seed | 随机种子,用于复现 | ||
--watermark | false | 添加水印 | |
--audio-gen | false | 启用原生音频生成 | |
--return-last-frame | false | 返回最后一帧图片 | |
--callback | Webhook 回调地址 |
素材输入(I2V / V2V / R2V)
| 参数 | 短写 | 可重复 | 上限 | 说明 |
|---|---|---|---|---|
--image | -i | 是 | 9 | 图片参考(URL 或本地路径) |
--video | -v | 是 | 3 | 视频参考 |
--audio | -a | 是 | 3 | 音频参考 |
--first-frame | 否 | 1 | 首帧图片 | |
--last-frame | 否 | 1 | 尾帧图片 |
所有素材总数不超过 12 个(Rule of 12)。本地文件自动 base64 编码上传。
等待与输出
| 参数 | 短写 | 默认值 | 说明 |
|---|---|---|---|
--wait | -w | false | 等待完成并自动下载 |
--output | -o | 输出路径(默认 seedance_<id>.mp4) | |
--timeout | 300 | 最大等待秒数 | |
--poll-interval | 10 | 轮询间隔秒数 | |
--strict | false | 超时返回 exit code 2(CI 用) | |
--quiet | -q | 静默模式:仅输出 task_id 或文件路径 | |
--json | JSON 格式输出 |
seedance status — 查询任务状态
seedance status <TASK_ID> [--json] [--wait] [--timeout 300]seedance download — 下载视频
seedance download <TASK_ID> [-o output.mp4]seedance list — 查看任务历史
seedance list [-n 20] [--status failed] [--json]seedance config — 管理配置
seedance config init # 交互式配置向导
seedance config show # 显示所有配置
seedance config get <KEY> # 获取单项
seedance config set <KEY> <VALUE> # 设置单项可配置项:api_key、base_url、model、resolution、ratio、duration、output_dir。
环境变量
| 变量 | 说明 |
|---|---|
ARK_API_KEY | API Key,优先级高于 config.toml |
使用示例
R2V:多角色参考生成
seedance generate "角色A向角色B挥拳出击" \
--image charA.png --image charB.png --duration 8 --waitV2V:风格迁移
seedance generate "匹配参考视频的运镜和剪辑风格" \
--video reference.mp4 --image character.png --duration 10 --wait音频驱动 + 口型同步
seedance generate "角色面对镜头讲话,中近景,锁定机位" \
--audio dialogue.mp3 --image character.png --audio-gen --duration 8 --wait从文件读取长提示词
echo '古风仙侠场景,白衣剑客凌空而起,剑光如虹划过夜空,远山云海翻涌。升格慢动作,仰拍视角。' > prompt.txt
seedance generate @prompt.txt --duration 10 --ratio 16:9 --wait批量生成(种子变体)
for seed in 1000 1001 1002 1003 1004; do
seedance generate "海边日落,金色光芒,镜头缓缓右移" --seed $seed -d 5 -q
done异步提交 + 稍后下载
TASK_ID=$(seedance generate "一段戏剧性场景" -q)
# ... 做其他事情 ...
seedance status $TASK_ID
seedance download $TASK_ID -o final.mp4CI/CD 集成
TASK_ID=$(seedance generate "产品广告场景" --wait --strict --timeout 600 -q)
seedance status $TASK_ID --json | jq '.status'
seedance list --status failed --json | jq '.[].task_id'任务状态
| 状态 | 终态 | 说明 |
|---|---|---|
submitted | 否 | 已提交 |
queued | 否 | 排队中 |
running | 否 | 生成中 |
succeeded | 是 | 生成完成 |
failed | 是 | 生成失败 |
expired | 是 | 结果已过期 |
cancelled | 是 | 已取消 |
退出码
| 退出码 | 含义 |
|---|---|
0 | 成功 |
1 | 错误(API 失败、参数错误等) |
2 | 超时(仅 --strict 模式) |
项目结构
seedance-cli/
├── src/
│ ├── main.rs # 入口 + 命令路由
│ ├── cli/ # 各子命令实现
│ │ ├── generate.rs
│ │ ├── status.rs
│ │ ├── download.rs
│ │ ├── list.rs
│ │ └── config.rs
│ ├── client/ # Ark API 客户端
│ ├── config/ # 配置文件管理
│ ├── core/ # 核心逻辑(上传 / 轮询 / 下载)
│ ├── store/ # SQLite 任务历史
│ └── ui/ # 终端输出 & 进度条
├── scripts/
│ ├── install.js # npm postinstall(下载二进制)
│ └── run.js # npm bin shim
├── .github/workflows/
│ └── release.yml # CI: 多平台编译 + npm 发布
├── Cargo.toml
└── package.json支持平台
| 平台 | 架构 |
|---|---|
| macOS | x86_64, aarch64 (Apple Silicon) |
| Linux | x86_64, aarch64 |
| Windows | x86_64, aarch64 |
发版
# 1. 同步 package.json 和 Cargo.toml 版本号
# 2. 创建并推送 tag
bash scripts/tag-release.sh
# 3. GitHub Actions 自动编译所有平台 + 发布到 npmLicense
MIT
Genre Guides & Prompt Templates (v5.0)
This reference provides genre-specific prompt templates and best practices for the seven most common Seedance 2.0 content categories. Use these as the starting point for the [skill:seedance-prompt] genre router.
---
1. Product / E-commerce
Goal: Clean, focused, high-fidelity product showcases.
| Template | Prompt Example |
|---|---|
| 360° Orbit | A glass perfume bottle on a white marble surface. Smooth 360-degree orbit camera. Soft studio key light, rim highlight. Macro depth-of-field. 4K pristine detail. No text. |
| Unboxing | First-person POV, hands open a luxury watch box. The watch is revealed, catching the light. Slow, deliberate hand movements. Top-down camera angle. |
| Macro Texture | Extreme macro shot of leather texture on a handbag. The camera slowly glides across the surface, highlighting the grain and stitching. Warm, soft light. |
| Beauty Demo | A woman applies red lipstick. Close-up on the lips. The lipstick texture is creamy and vibrant. Flawless skin. Beauty advertising style. |
Recommended Settings:
- Mode: I2V (with product image) or T2V
- Duration: 8-12 seconds
- Aspect Ratio: 1:1 or 9:16
- Prompt Length: 30-50 words
Common Pitfalls:
- Avoid brand logos (gets blocked).
- Don't describe the product if using an image reference; just describe the motion.
- Keep the background simple and non-distracting.
---
2. Lifestyle / Social Media
Goal: Relatable, authentic-feeling moments for platforms like TikTok and Instagram.
| Template | Prompt Example |
|---|---|
| Morning Routine | A young woman makes coffee in a sunlit kitchen. Handheld phone perspective, slight sway. She smiles as she sips the coffee. Warm, cozy aesthetic. |
| Café Scene | Friends laughing at a café table. The camera is placed on the table, looking up slightly. Steam rises from coffee cups. Natural, candid moment. |
| Beach Day | A person runs along the beach at sunset, their dog chasing them. Low-angle tracking shot from behind. Lens flare from the setting sun. Joyful and energetic. |
| Pet Interaction | A cat playfully bats at a string held just off-camera. Close-up on the cat, shallow depth of field. The cat is focused and curious. Soft, indoor lighting. |
Recommended Settings:
- Mode: T2V or I2V
- Duration: 6-10 seconds
- Aspect Ratio: 9:16
- Prompt Length: 40-60 words
Common Pitfalls:
- Avoid overly cinematic camera moves. Stick to
handheld,static, orslow pan. - Focus on a single, clear action and emotion.
- Use style words like
UGC,candid,authentic,phone footage.
---
3. Drama / Narrative
Goal: Cinematic storytelling with consistent characters and emotional weight.
| Template | Prompt Example |
|---|---|
| Suspense Corridor | @Image1 character reference. A man cautiously walks down a dark, narrow corridor. He holds a flashlight, its beam cutting through the darkness. The camera follows closely behind him, handheld. The only sound is his footsteps and nervous breathing. |
| Romantic Scene | @Image1 character A, @Image2 character B. A man and woman have a quiet conversation on a park bench at night. A single streetlight provides a warm key light. The camera is a static wide shot, letting the moment breathe. They look at each other and smile. |
| Action Intro | @Image1 character reference. A woman sits at a bar, stirring her drink. She glances towards the door, her expression hardening. The camera slowly pushes in on her face. Moody, noir lighting. The background is out of focus. |
Recommended Settings:
- Mode: I2V or R2V (with character images)
- Duration: 10-15 seconds
- Aspect Ratio: 16:9 or 2.35:1
- Prompt Length: 60-100 words
Common Pitfalls:
- Character consistency is the biggest challenge. Use
@Imagereferences for every character in every shot. - Don't cram too much plot into one clip. Focus on a single beat or emotional shift.
- Use the
seedance-interviewskill to develop the narrative before prompting.
---
4. Music Video
Goal: Visually dynamic clips that sync with an audio track.
| Template | Prompt Example |
|---|---|
| Beat Sync | @Image1 artist, @Audio1 track. The artist performs in a neon-lit warehouse. Quick cuts sync to the drum beat at 120 BPM. Whip pans and snap zooms on the chorus. Energetic and vibrant. |
| Dance Transfer | @Video1 dance choreography. Transfer the dance motion to @Image1 [target character], who is now in a fantasy forest setting. Match the camera movements from @Video1. |
| Abstract Visuals | @Audio1 track. Abstract ink-in-water visuals pulse and bloom in time with the music. The color palette is black, white, and gold. Slow, hypnotic motion. |
Recommended Settings:
- Mode: R2V (with
@Audio1and/or@Video1) - Duration: Match audio clip length (max 15s)
- Aspect Ratio: 16:9 or 9:16
- Prompt Length: 50-80 words
Common Pitfalls:
- Lip-sync is still experimental. For dialogue/singing, focus on emotion and general mouth movement, not perfect sync.
- Use the Chinese term
卡点(kǎdiǎn) for beat-sync; it often works better. - Keep the visual concept simple to let the music and motion shine.
---
5. Landscape / Travel
Goal: Sweeping, beautiful shots of natural and urban environments.
| Template | Prompt Example |
|---|---|
| Drone Aerial | Sweeping aerial drone shot over the Scottish Highlands at dawn. Mist hangs low in the valleys. The camera slowly pulls back to reveal the vast scale of the mountains. Epic and majestic. |
| Mountain Dawn | The sun rises over a snow-capped mountain peak. Time-lapse style, clouds move quickly. The light changes from cool blue to warm gold. Static wide shot. |
| Underwater | A school of fish swims through a coral reef. Sunlight filters down through the clear blue water. The camera drifts slowly with the current. Peaceful and serene. |
Recommended Settings:
- Mode: T2V
- Duration: 8-15 seconds
- Aspect Ratio: 16:9
- Prompt Length: 30-60 words
Common Pitfalls:
- Avoid adding subjects unless necessary. Let the landscape be the hero.
- Use simple, slow camera moves:
slow pan,slow aerial pullback,static wide shot. - Specify the time of day and weather for lighting and mood control (
golden hour,stormy sky,overcast).
---
6. Commercial / Brand
Goal: Polished, high-end visuals that evoke a specific brand feeling.
| Template | Prompt Example |
|---|---|
| Car Ad | A sleek black sports car drives on a winding mountain road at sunset. The camera tracks alongside the car, low to the ground. Lens flare from the sun. The car looks powerful and luxurious. |
| Real Estate | A modern, minimalist living room with floor-to-ceiling windows overlooking a forest. The camera slowly pans across the room, showing the clean lines and natural light. Serene and aspirational. |
| App Demo | A person holds a smartphone, their thumb scrolling through a vibrant, colorful app interface. Close-up on the phone screen. The app looks intuitive and engaging. Bright, clean lighting. |
Recommended Settings:
- Mode: T2V or I2V
- Duration: 6-10 seconds
- Aspect Ratio: 16:9
- Prompt Length: 40-70 words
Common Pitfalls:
- Do not use real brand names or logos.
- Focus on the feeling of the brand (e.g.,
luxurious,rugged,innovative,wholesome). - Keep the message singular and clear.
---
7. Anime / Artistic
Goal: Achieve specific, non-photorealistic visual styles.
| Template | Prompt Example |
|---|---|
| Cel-Shaded Action | An anime warrior with white hair, in the style of Studio Trigger. He draws a glowing blue sword. Dynamic low-angle shot. Bold outlines, flat color fills, high-contrast shading. Explosive energy. |
| Watercolor Animation | A Ghibli-style scene of a girl in a field of flowers. A gentle breeze makes the flowers and her dress sway. Soft, watercolor wash backgrounds and ink outline characters. Dreamy and nostalgic. |
| Stop-Motion | A claymation character bakes a tiny cake in a cozy kitchen. The animation has a slightly jerky, handmade feel. Visible fingerprints on the clay. Warm, miniature lighting. |
| Pixel Art | A knight walks through a pixel art forest. 16-bit style. The color palette is limited to greens and browns. The camera is a static side-scroller view. |
Recommended Settings:
- Mode: T2V or I2V
- Duration: 8-12 seconds
- Aspect Ratio: 16:9 or 4:3
- Prompt Length: 50-90 words
Common Pitfalls:
- Rule #1: One style anchor beats five adjectives. Instead of
soft dreamy hand-painted, useStudio Ghibli watercolor style. - Do not use the names of specific copyrighted shows or characters. Reference the studio or the art style.
- Specify animation techniques like
motion on twosorsmear framesfor more authentic results.
The I2V Bible: Image-to-Video Best Practices (v5.0)
This guide covers the specific, non-obvious rules for creating high-quality prompts in Image-to-Video (I2V) mode.
The Golden Rule of I2V
Your prompt should ONLY describe what the image CANNOT show: motion and camera movement.
Do not re-describe the character, the clothing, the background, or the style. The model can see the image. Re-describing it in text creates a conflict that confuses the model and leads to poor results.
---
The Correct I2V Workflow
1. Start with a strong reference image. It should be clear, well-lit, and show the subject and style you want. 2. Upload the image. It will be tagged as @Image1. 3. Write a motion-only prompt. Your prompt should be 1-3 sentences and focus exclusively on what you want to happen next.
---
Prompt Examples
Reference Image: A knight in silver armor stands in a forest.
| Goal | Prompt | Why It Works |
|---|---|---|
| Simple Action | The knight raises his sword and points it at the camera. His expression is serious. Slow push-in on his face. | The prompt only describes the action, the emotion, and the camera move. It doesn't mention the armor, the forest, or the sword itself. |
| Complex Action | The knight performs a fast, three-hit sword combo. The camera is handheld and tracks the blade, with motion blur on the background. | Again, the prompt is 100% focused on motion and camera. |
| Facial Expression | The knight's eyes widen in surprise. He takes a small step back. Close-up shot. | I2V is excellent for subtle emotional changes. |
Reference Image: A woman in a red dress stands on a city street.
| Goal | Prompt | Why It Works |
|---|---|---|
| Walking | She walks forward, looking confident. The camera tracks with her, medium shot. | Simple, clear, motion-focused. |
| Turning | She turns her head to look behind her, a worried expression on her face. The camera stays static. | Describes the emotional shift and the camera action (or lack thereof). |
---
Common I2V Mistakes
Reference Image: A knight in silver armor stands in a forest.
- BAD:
@Image1. A knight in shining silver armor stands in a dark forest. He is holding a large broadsword. He raises his sword. - Why it fails: The prompt wastes 90% of its content re-describing what the model can already see. This creates conflict and noise.
- BAD:
@Image1. The knight attacks. - Why it fails: Too vague. The model doesn't know how to attack. You must describe the specific motion.
---
Maintained by [Emily (@iamemily2050)](https://github.com/Emily2040)
Intent vs. Precision: Directing the AI (v5.0)
This reference explains the core philosophical shift in the v5.0 skill library: treating Seedance 2.0 as an AI director you collaborate with, not a render engine you command.
The Old Way: Precision (and why it fails)
The old workflow was based on the idea that more detail equals more control. This led to long, hyper-specific prompts that tried to dictate every single element of the frame.
Example of a Precision-Based Prompt:
A 30-year-old woman with blonde hair in a messy bun, wearing a red silk dress with a high neckline, stands on a wet asphalt street at night. The street is illuminated by a single sodium-vapor streetlight that casts a warm, orange glow. Rain falls at a 15-degree angle. The camera is a 50mm lens at f/1.8, positioned at a low angle, and pushes in slowly over 8 seconds...
Why this fails:
1. Cognitive Overload: This level of detail is difficult for a human to write and even harder for the model to interpret correctly. 2. Competing Demands: The prompt contains dozens of competing demands. red silk dress + wet + night + orange glow is a nightmare for the lighting engine. 3. It Fights the Model: This approach treats the model like a dumb renderer. It doesn't leverage the model's own vast knowledge of cinematography and composition.
---
The New Way: Intent (and why it works)
The new workflow focuses on conveying the intent and feeling of the shot. You provide the key creative ingredients and let the AI director figure out the best way to cook the meal.
Example of an Intent-Based Prompt:
A woman in a red dress stands alone on a wet city street at night. She looks vulnerable, but there's a hint of defiance in her expression. The mood is lonely and cinematic, like a classic film noir. Slow push-in on her face.
Why this works:
1. Clear Creative Direction: The prompt tells the model the feeling to aim for (lonely, cinematic, film noir, vulnerable, defiance). This is a much more powerful instruction than specifying the f-stop. 2. Leverages the Model: The model knows what "film noir" lighting looks like. It knows how to frame a shot to make someone look "vulnerable." You are collaborating with its knowledge, not fighting it. 3. Concise and Effective: This prompt is shorter, easier to write, and has a much higher success rate.
---
The Trade-Off
- Precision gives you the illusion of control but often leads to failure.
- Intent gives you less direct control over the micro-details but more control over the final creative result.
Your job as a prompter is to be the Director of Photography, not the focus puller. Set the scene, define the mood, and let your AI crew do their jobs.
---
Maintained by [Emily (@iamemily2050)](https://github.com/Emily2040)
json-schema · Seedance 2.0 Prompt Schema v3
JSON is for storage only. Always compile to plain text before sending to the platform.
Schema v3
{
"meta": {
"mode": "i2v",
"level": 3,
"dur": 10,
"ar": "16:9",
"res": "1080p",
"seed": 42
},
"ref": {
"char": "@Image1",
"bg": "@Image2",
"cam": "@Video1",
"bgm": "@Audio1"
},
"shot": {
"subj": "young woman in red coat",
"act": "turns, looks up, smiles",
"cam": "slow push-in, MCU",
"light": "golden backlight, soft fill",
"style": "cinematic",
"snd": "wind ambience, soft piano"
},
"lock": ["character identity", "background"],
"exit": "freeze on smile, 0.5s"
}Field Reference
| Field | Values | Required |
|---|---|---|
meta.mode | t2v i2v v2v r2v | yes |
meta.level | 1 2 3 4 | yes |
meta.dur | integer, seconds | yes |
meta.ar | 16:9 9:16 4:3 3:4 21:9 1:1 | yes |
meta.res | 720p 1080p 2k | yes |
meta.seed | integer or omit | no |
ref.* | @TagN strings or omit | no |
shot.subj | noun phrase | yes |
shot.act | verb phrase + timing | yes |
shot.cam | movement + framing | yes |
shot.light | descriptor | recommended |
shot.style | 1–3 tokens | recommended |
shot.snd | ambient + sfx + music | no |
lock | array of consistency targets | no |
exit | last-frame or timing note | no |
Compiler Output (plain text from above schema)
@Image1 character identity. @Image2 background lock. @Audio1 bgm.
Young woman in red coat turns, looks up, smiles.
Slow push-in to MCU.
Golden backlight, soft fill.
Cinematic.
Wind ambience, soft piano.
Maintain character identity, maintain background. Freeze on smile, 0.5 s.Budget Triage (over character limit — cut in this order)
| Priority | Field | Cut rule |
|---|---|---|
| 6 (cut last) | shot.subj shot.act | Never cut |
| 5 | ref.* | Never cut |
| 4 | shot.cam | Compress to 3 words |
| 3 | shot.light | Drop to 1 phrase |
| 2 | shot.style | Reduce to 1 token |
| 1 (cut first) | shot.snd exit | Remove entirely |
Segmented Shot (Level 3–4)
{
"seg": [
{ "t": "0-4s", "act": "stands still, wind moves coat", "cam": "static wide" },
{ "t": "4-8s", "act": "turns head slowly", "cam": "slow push-in" },
{ "t": "8-10s","act": "direct eye contact, smiles", "cam": "MCU, locked" }
]
}Compiled:
0–4 s: stands still, wind moves coat. Static wide.
4–8 s: turns head slowly. Slow push-in.
8–10 s: direct eye contact, smiles. MCU, locked.platform-constraints · Seedance 2.0 (Q1 2026)
Last verified: 2026-02-26 against ByteDance official launch blog + multiple third-party guides
Generation Duration
| Platform | Min | Max | Notes |
|---|---|---|---|
| Web (Dreamina/Jimeng) | 4 s | 15 s | User-selectable slider |
| All platforms | 4 s | 15 s | No confirmed mobile-specific cap |
⚠️ An earlier version of this file listed "5–10 s mobile" — that distinction is unconfirmed. All verified sources say 4–15 s universally.
Resolution
| Tier | Resolution |
|---|---|
| Default | 720p |
| Standard | 1080p |
| Premium | 2K |
File Budget — Rule of 12
| Type | Max count | Duration/size limit | Format |
|---|---|---|---|
| Image | 9 | — | JPG · PNG · WEBP |
| Video | 3 | 15 s TOTAL across all 3 | MP4 · MOV |
| Audio | 3 | 15 s TOTAL across all 3 | MP3 |
| Total files | 12 | — | — |
⚠️ The 15-second video limit is combined total, not per-file. Three 5-second clips = 15 s, which hits the ceiling. File size per video not confirmed from primary sources.
Aspect Ratios
16:9 · 9:16 · 4:3 · 3:4 · 21:9 · 1:1
v3.1.0 and earlier only listed four ratios. 3:4 and 21:9 confirmed via apiyi.com technical guide.
Audio Output
Dual-channel stereo (synchronized audio-video joint generation).
Negative Prompts
NOT SUPPORTED. Seedance 2.0 does not accept negative prompt syntax (--no, negative:, etc.). Use positive constraints instead: describe what you want, not what you don't want.
❌ --no watermark --no distorted hands
✅ clean background, stable hands, no overlaid text
[describe the positive constraint in plain language]API Status (as of 2026-02-26)
| Channel | Status |
|---|---|
| Jimeng / Dreamina web | ✅ Live (paying members) |
| Volcengine console debugging | ✅ Available for testing |
| Official Volcengine API | ❌ Delayed — was planned Feb 24; postponed due to copyright dispute |
| BytePlus (international) | ❌ Not yet officially launched |
| Third-party proxy APIs (AtlasCloud, APIYI) | Available but unofficial |
Until the official API launches, do not plan production integrations against a Seedance 2.0 API endpoint.
Platforms
| Surface | URL / App |
|---|---|
| Web | jimeng.jianying.com (Dreamina) |
| Mobile | CapCut · Jianying |
| API (pending) | Volcengine / BytePlus — launch date TBD |
Prompt Length Guidance
| Language | Simple scene | Complex choreography |
|---|---|---|
| English | 30–100 words | 300–1000+ words |
| Chinese | 50–200 characters | 500–1000+ characters |
Shorter prompts → higher motion quality in most cases.
use anyhow::Result;
use crate::core::tos;
pub async fn execute() -> Result<()> {
let deleted = tos::cleanup_expired().await?;
if deleted > 0 {
println!("Cleaned up {deleted} expired TOS temp file(s)");
} else {
println!("No expired TOS temp files found");
}
Ok(())
}
pub mod downloader;
pub mod poller;
pub mod tos;
pub mod upload;
pub mod video;
Related skills
FAQ
Is Seedance Cli safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.