mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-07 02:21:23 +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 -- kinovi_web 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/KinoviWeb 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 kinovi_web)
- Create
src/commands/kinovi_web/subcommands/my_command.rs - Add
pub mod my_command;tosubcommands/mod.rs - Add the name to
SUBCOMMAND_NAMESindispatch.rs - Add a variant to
KinoviWebCommandenum 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
KinoviWebSessionfromstate.cookiesviafrom_cookies_string() - Get
StorytellerCredentialSetfromstate.creds(parsed from ARTCRAFT_COOKIES) - External crates used:
artcraft_client(media file download, omni API),kinovi_web_client(Kinovi direct),artcraft_api_defs(request types)
Subcommands
kinovi_web (direct Kinovi API)
kinovi_web find_job --token <order_id>— search for a job across all pageskinovi_web failed_job_histogram— histogram of failure reasonskinovi_web 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]