mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-03 08:57:54 +00:00
2.4 KiB
2.4 KiB
support-tool
Production support CLI for debugging and manual operations against external services.
Building & Running
cargo build -p support-tool
cargo run -p support-tool -- seedance2pro generate_video --prompt "A corgi at the lake"
Environment
Requires a .env-support-tool-secrets file (or env vars) with:
SEEDANCE2PRO_COOKIES— session cookies for Kinovi/Seedance2Pro API authARTCRAFT_COOKIES— session cookies for ArtCraft API auth (format:session=...; visitor=...)
Architecture
- Entry point:
src/main.rs→ normalizes args (underscores optional) → dispatches - Top-level commands in
src/commands/run.rs(TopLevelCommandenum) - Each top-level command has its own module with
dispatch.rs,state.rs,subcommands/ - Subcommands use
#[derive(Args)]for their argument structs - All subcommand
run()functions areasync fnreturninganyhow::Result<()>
Adding a New Subcommand (to seedance2pro)
- Create
src/commands/seedance2pro/subcommands/my_command.rs - Add
pub mod my_command;tosubcommands/mod.rs - Add the name to
SUBCOMMAND_NAMESindispatch.rs - Add a variant to
Seedance2proCommandenum indispatch.rs - Add a match arm in
dispatch.rs::run()
Utilities
src/utils/parse_video_model.rs— shared parser for loose video model names →CommonVideoModelsrc/utils/normalize_subcommands.rs— underscore-insensitive arg normalizer
Conventions
- Use
log::info!()for status output, neverprintln!(except for final results) - Use
anyhow::anyhow!()for ad-hoc errors - Get
Seedance2ProSessionfromstate.cookiesviafrom_cookies_string() - Get
StorytellerCredentialSetfromstate.creds(parsed from ARTCRAFT_COOKIES) - External crates used:
artcraft_client(media file download, omni API),seedance2pro_client(Kinovi direct),artcraft_api_defs(request types)
Subcommands
seedance2pro (direct Kinovi API)
seedance2pro find_job --token <order_id>— search for a job across all pagesseedance2pro failed_job_histogram— histogram of failure reasonsseedance2pro generate_video --prompt <text_or_file> [--model seedance2p0] [--start_frame_media_token mf_xxx] [--localhost] [--download_path /tmp/media_files]
artcraft (omni API)
artcraft generate_video --prompt <text_or_file> [--model seedance2p0] [--start_frame_media_token mf_xxx] [--duration 5] [--localhost]