diff --git a/crates/api_clients/seedance2pro_client/src/requests/generate_video/generate_video.rs b/crates/api_clients/seedance2pro_client/src/requests/generate_video/generate_video.rs index 0712167b33..88d9c3ddf9 100644 --- a/crates/api_clients/seedance2pro_client/src/requests/generate_video/generate_video.rs +++ b/crates/api_clients/seedance2pro_client/src/requests/generate_video/generate_video.rs @@ -908,5 +908,137 @@ mod tests { assert_eq!(1, 2); // NB: Intentional failure to inspect output. Ok(()) } + + mod character_tests { + use super::*; + + const STEAMPUNK_CLOWN_ID: &str = "char_1775176566518_sik0te"; + const MOCHI_ID: &str = "char_1775177718294_g2pitx"; + + #[tokio::test] + #[ignore] // manually test — requires real cookies, costs money + async fn test_text_prompt_with_character_pro() -> AnyhowResult<()> { + setup_test_logging(LevelFilter::Trace); + let session = test_session()?; + let args = GenerateVideoArgs { + session: &session, + model_type: ModelType::Seedance2Pro, + prompt: "@Steampunk Clown is juggling flaming torches in a circus tent.".to_string(), + resolution: Resolution::Landscape16x9, + duration_seconds: 5, + batch_count: BatchCount::One, + start_frame_url: None, + end_frame_url: None, + reference_image_urls: None, + reference_video_urls: None, + reference_audio_urls: None, + character_ids: Some(vec![STEAMPUNK_CLOWN_ID.to_string()]), + use_face_blur_hack: None, + host_override: None, + }; + let result = generate_video(args).await?; + println!("Task ID: {}", result.task_id); + println!("Order ID: {}", result.order_id); + assert!(!result.task_id.is_empty()); + assert!(!result.order_id.is_empty()); + assert_eq!(1, 2); // NB: Intentional failure to inspect output. + Ok(()) + } + + #[tokio::test] + #[ignore] // manually test — requires real cookies, costs money + async fn test_text_prompt_with_character_fast() -> AnyhowResult<()> { + setup_test_logging(LevelFilter::Trace); + let session = test_session()?; + let args = GenerateVideoArgs { + session: &session, + model_type: ModelType::Seedance2Fast, + prompt: "@Mochi the female shiba inu is eating a cheese pizza while standing on the table".to_string(), + resolution: Resolution::Portrait9x16, + duration_seconds: 5, + batch_count: BatchCount::One, + start_frame_url: None, + end_frame_url: None, + reference_image_urls: None, + reference_video_urls: None, + reference_audio_urls: None, + character_ids: Some(vec![MOCHI_ID.to_string()]), + use_face_blur_hack: None, + host_override: None, + }; + let result = generate_video(args).await?; + println!("Task ID: {}", result.task_id); + println!("Order ID: {}", result.order_id); + assert!(!result.task_id.is_empty()); + assert!(!result.order_id.is_empty()); + assert_eq!(1, 2); // NB: Intentional failure to inspect output. + Ok(()) + } + + #[tokio::test] + #[ignore] // manually test — requires real cookies, costs money + async fn test_character_with_image_ref_pro() -> AnyhowResult<()> { + setup_test_logging(LevelFilter::Trace); + let session = test_session()?; + let args = GenerateVideoArgs { + session: &session, + model_type: ModelType::Seedance2Pro, + prompt: "@Steampunk Clown is walking up to pet a dog on the couch.".to_string(), + resolution: Resolution::Landscape16x9, + duration_seconds: 5, + batch_count: BatchCount::One, + start_frame_url: None, + end_frame_url: None, + reference_image_urls: Some(vec![ + "https://static.seedance2-pro.com/materials/20260329/1774752385699-1ff44886.jpeg".to_string(), + ]), + reference_video_urls: None, + reference_audio_urls: None, + character_ids: Some(vec![STEAMPUNK_CLOWN_ID.to_string()]), + use_face_blur_hack: None, + host_override: None, + }; + let result = generate_video(args).await?; + println!("Task ID: {}", result.task_id); + println!("Order ID: {}", result.order_id); + assert!(!result.task_id.is_empty()); + assert!(!result.order_id.is_empty()); + assert_eq!(1, 2); // NB: Intentional failure to inspect output. + Ok(()) + } + + #[tokio::test] + #[ignore] // manually test — requires real cookies, costs money + async fn test_two_characters_fast() -> AnyhowResult<()> { + setup_test_logging(LevelFilter::Trace); + let session = test_session()?; + let args = GenerateVideoArgs { + session: &session, + model_type: ModelType::Seedance2Fast, + prompt: "@Steampunk Clown and @Mochi are playing fetch in a sunny park.".to_string(), + resolution: Resolution::Landscape16x9, + duration_seconds: 5, + batch_count: BatchCount::One, + start_frame_url: None, + end_frame_url: None, + reference_image_urls: None, + reference_video_urls: None, + reference_audio_urls: None, + character_ids: Some(vec![ + STEAMPUNK_CLOWN_ID.to_string(), + MOCHI_ID.to_string(), + ]), + use_face_blur_hack: None, + host_override: None, + }; + let result = generate_video(args).await?; + println!("Task ID: {}", result.task_id); + println!("Order ID: {}", result.order_id); + assert!(!result.task_id.is_empty()); + assert!(!result.order_id.is_empty()); + assert_eq!(1, 2); // NB: Intentional failure to inspect output. + Ok(()) + } + } } }