diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/handle_artcraft_seedance_2p0.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/handle_artcraft_seedance_2p0.rs new file mode 100644 index 0000000000..046d5b82d6 --- /dev/null +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/handle_artcraft_seedance_2p0.rs @@ -0,0 +1,62 @@ +use crate::core::commands::enqueue::generate_error::GenerateError; +use crate::core::commands::enqueue::image_to_video::enqueue_image_to_video_command::{EnqueueImageToVideoRequest, SoraOrientation}; +use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; +use crate::core::events::generation_events::common::{GenerationModel}; +use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; +use artcraft_api_defs::generate::video::multi_function::seedance_2p0_multi_function_video_gen::{Seedance2p0AspectRatio, Seedance2p0MultiFunctionVideoGenRequest}; +use enums::common::generation_provider::GenerationProvider; +use enums::tauri::tasks::task_type::TaskType; +use idempotency::uuid::generate_random_uuid; +use log::{error, info}; +use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet; +use storyteller_client::endpoints::generate::video::multi_function::seedance_2p0_multi_function_video_gen::seedance_2p0_multi_function_video_gen; + +pub (super) async fn handle_artcraft_seedance_2p0( + request: &EnqueueImageToVideoRequest, + app_env_configs: &AppEnvConfigs, + creds: &StorytellerCredentialSet, +) -> Result { + + let uuid_idempotency_token = generate_random_uuid(); + + let aspect_ratio = match request.sora_orientation { + Some(SoraOrientation::Portrait) => Seedance2p0AspectRatio::Portrait9x16, + Some(SoraOrientation::Landscape) => Seedance2p0AspectRatio::Landscape16x9, + None => Seedance2p0AspectRatio::Landscape16x9, + }; + + let request = Seedance2p0MultiFunctionVideoGenRequest { + uuid_idempotency_token, + prompt: request.prompt.clone(), + start_frame_media_token: request.image_media_token.clone(), + end_frame_media_token: request.end_frame_image_media_token.clone(), + reference_image_media_tokens: None, + aspect_ratio: Some(aspect_ratio), + duration_seconds: None, // TODO: Parameterize + batch_count: None, + }; + + let result = seedance_2p0_multi_function_video_gen( + &app_env_configs.storyteller_host, + Some(&creds), + request, + ).await; + + let job_token = match result { + Ok(enqueued) => { + info!("Successfully enqueued."); + enqueued.inference_job_token + } + Err(err) => { + error!("Failed to enqueue: {:?}", err); + return Err(GenerateError::from(err)); + } + }; + + Ok(TaskEnqueueSuccess { + task_type: TaskType::VideoGeneration, + model: Some(GenerationModel::Seedance2p0), + provider: GenerationProvider::Artcraft, + provider_job_id: Some(job_token.to_string()), + }) +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/handle_artcraft_video.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/handle_artcraft_video.rs index 7d146f6665..d76a2a0b3e 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/handle_artcraft_video.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/handle_artcraft_video.rs @@ -6,6 +6,7 @@ use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_kl use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_kling_2p5_turbo_pro::handle_artcraft_kling_2p5_turbo_pro; use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_kling_2p6_pro::handle_artcraft_kling_2p6_pro; use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_seedance_1_lite::handle_artcraft_seedance_1_lite; +use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_seedance_2p0::handle_artcraft_seedance_2p0; use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_sora2::handle_artcraft_sora2; use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_sora2_pro::handle_artcraft_sora2_pro; use crate::core::commands::enqueue::image_to_video::artcraft::handle_artcraft_veo2::handle_artcraft_veo2; @@ -39,6 +40,7 @@ pub async fn handle_video_artcraft( Some(VideoModel::Kling2p5TurboPro) => handle_artcraft_kling_2p5_turbo_pro(request, app_env_configs, &creds).await, Some(VideoModel::Kling2p6Pro) => handle_artcraft_kling_2p6_pro(request, app_env_configs, &creds).await, Some(VideoModel::Seedance10Lite) => handle_artcraft_seedance_1_lite(request, app_env_configs, &creds).await, + Some(VideoModel::Seedance2p0) => handle_artcraft_seedance_2p0(request, app_env_configs, &creds).await, Some(VideoModel::Sora2) => handle_artcraft_sora2(request, app_env_configs, &creds).await, Some(VideoModel::Sora2Pro) => handle_artcraft_sora2_pro(request, app_env_configs, &creds).await, Some(VideoModel::Veo2) => handle_artcraft_veo2(request, app_env_configs, &creds).await, diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/mod.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/mod.rs index 55319db5af..0f88a33ee7 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/mod.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/artcraft/mod.rs @@ -5,6 +5,7 @@ mod handle_artcraft_kling_2p1_pro; mod handle_artcraft_kling_2p5_turbo_pro; mod handle_artcraft_kling_2p6_pro; mod handle_artcraft_seedance_1_lite; +mod handle_artcraft_seedance_2p0; mod handle_artcraft_sora2; mod handle_artcraft_sora2_pro; mod handle_artcraft_veo2; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/enqueue_image_to_video_command.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/enqueue_image_to_video_command.rs index 2c9af13843..0c3659ca1a 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/enqueue_image_to_video_command.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_to_video/enqueue_image_to_video_command.rs @@ -56,6 +56,9 @@ pub enum VideoModel { #[serde(rename = "seedance_1.0_lite")] Seedance10Lite, + #[serde(rename = "seedance_2p0")] + Seedance2p0, + #[serde(rename = "sora_2")] Sora2, diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs b/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs index e78d8655ef..7e2b4d96aa 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs @@ -82,6 +82,7 @@ impl TaskEnqueueSuccess{ Some(GenerationModel::Kling2p5TurboPro) => Some(TaskModelType::Kling2p5TurboPro), Some(GenerationModel::Kling2p6Pro) => Some(TaskModelType::Kling2p6Pro), Some(GenerationModel::Seedance10Lite) => Some(TaskModelType::Seedance10Lite), + Some(GenerationModel::Seedance2p0) => Some(TaskModelType::Seedance2p0), Some(GenerationModel::Sora2) => Some(TaskModelType::Sora2), Some(GenerationModel::Sora2Pro) => Some(TaskModelType::Sora2Pro), Some(GenerationModel::Veo2) => Some(TaskModelType::Veo2), diff --git a/crates/desktop/artcraft/src/core/events/generation_events/common.rs b/crates/desktop/artcraft/src/core/events/generation_events/common.rs index 7cddc3091c..ead595c69a 100644 --- a/crates/desktop/artcraft/src/core/events/generation_events/common.rs +++ b/crates/desktop/artcraft/src/core/events/generation_events/common.rs @@ -86,6 +86,8 @@ pub enum GenerationModel { Sora2Pro, #[serde(rename = "seedance_1.0_lite")] Seedance10Lite, + #[serde(rename = "seedance_2p0")] + Seedance2p0, #[serde(rename = "veo_2")] Veo2, #[serde(rename = "veo_3")] diff --git a/crates/lib/actix_cors_configs/src/configs/artcraft_3d.rs b/crates/lib/actix_cors_configs/src/configs/artcraft_3d.rs index 9befa61dfe..a802fa2516 100644 --- a/crates/lib/actix_cors_configs/src/configs/artcraft_3d.rs +++ b/crates/lib/actix_cors_configs/src/configs/artcraft_3d.rs @@ -16,4 +16,5 @@ pub fn add_artcraft_3d(cors: Cors, _is_production: bool) -> Cors { .allowed_origin("http://localhost:5175") // If already started .allowed_origin("https://macaroni-1.tailce84f.ts.net") // TODO .allowed_origin("https://halide.tailce84f.ts.net") // TODO + .allowed_origin("https://brandons-macbook-pro.taild62114.ts.net") // TODO }