From e954e6700f85dbcb2cb13530eff24c84ef6f0bcf Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 24 Jun 2026 13:31:04 -0400 Subject: [PATCH] move other models --- .../video_models/by_type/grok_video_models.rs | 90 ++++ .../by_type/happy_horse_video_models.rs | 39 ++ .../by_type/kling_video_models.rs | 209 ++++++++ .../by_type/seedance_1p5_video_models.rs | 42 ++ .../video_models/by_type/sora_video_models.rs | 53 ++ .../video_models/by_type/veo_video_models.rs | 129 +++++ .../omni_gen/video_models/video_models.rs | 498 +----------------- 7 files changed, 576 insertions(+), 484 deletions(-) diff --git a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/grok_video_models.rs b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/grok_video_models.rs index e69de29bb2..6a9457d166 100644 --- a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/grok_video_models.rs +++ b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/grok_video_models.rs @@ -0,0 +1,90 @@ +use artcraft_api_defs::omni_gen::models::omni_gen_video_models::OmniGenVideoModelDetails; +use enums::common::generation::common_aspect_ratio::CommonAspectRatio; +use enums::common::generation::common_resolution::CommonResolution; +use enums::common::generation::common_video_model::CommonVideoModel; +use enums::common::generation::model_creator::ModelCreator; + +/// Grok Imagine video models. +pub fn grok_video_models() -> Vec { + let mut models = Vec::new(); + + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::GrokImagineVideo, + model_creator: Some(ModelCreator::Grok), + full_name: Some("Grok Imagine".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(false), + image_references_supported: Some(true), + image_references_max: Some(7), + //video_references_supported: Some(false), + //video_references_max: Some(3), + //video_references_max_total_duration_seconds: Some(15), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Auto, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::WideFourByThree, + CommonAspectRatio::WideThreeByTwo, + CommonAspectRatio::Square, + CommonAspectRatio::TallTwoByThree, + CommonAspectRatio::TallThreeByFour, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::FourEightyP, + CommonResolution::SevenTwentyP, + ]), + resolution_default: Some(CommonResolution::SevenTwentyP), + //batch_size_options: Some(vec![1, 2, 4]), + //batch_size_default: Some(1), + duration_seconds_min: Some(1), + duration_seconds_max: Some(15), + duration_seconds_max_with_image_references: Some(10), + duration_seconds_default: Some(8), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::GrokImagineVideo1p5, + model_creator: Some(ModelCreator::Grok), + full_name: Some("Grok Imagine 1.5 Preview".to_string()), + extra_info: Some("Fast and high quality".to_string()), + extra_info_short: Some("Fast and high quality".to_string()), + text_to_video_supported: Some(false), // NB: This might be temporary + text_prompt_supported: Some(true), + text_prompt_max_length: Some(4096), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(false), + image_references_supported: Some(false), + //image_references_max: Some(7), + //video_references_supported: Some(false), + //video_references_max: Some(3), + //video_references_max_total_duration_seconds: Some(15), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Auto, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::WideFourByThree, + CommonAspectRatio::WideThreeByTwo, + CommonAspectRatio::Square, + CommonAspectRatio::TallTwoByThree, + CommonAspectRatio::TallThreeByFour, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::FourEightyP, + CommonResolution::SevenTwentyP, + ]), + resolution_default: Some(CommonResolution::SevenTwentyP), + //batch_size_options: Some(vec![1, 2, 4]), + //batch_size_default: Some(1), + duration_seconds_min: Some(1), + duration_seconds_max: Some(15), + duration_seconds_max_with_image_references: Some(10), + duration_seconds_default: Some(8), + ..Default::default() + }); + + models +} diff --git a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/happy_horse_video_models.rs b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/happy_horse_video_models.rs index e69de29bb2..2b11b19e7b 100644 --- a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/happy_horse_video_models.rs +++ b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/happy_horse_video_models.rs @@ -0,0 +1,39 @@ +use artcraft_api_defs::omni_gen::models::omni_gen_video_models::OmniGenVideoModelDetails; +use enums::common::generation::common_aspect_ratio::CommonAspectRatio; +use enums::common::generation::common_resolution::CommonResolution; +use enums::common::generation::common_video_model::CommonVideoModel; +use enums::common::generation::model_creator::ModelCreator; + +/// Happy Horse video models. +pub fn happy_horse_video_models() -> Vec { + let mut models = Vec::new(); + + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::HappyHorse1p0, + model_creator: Some(ModelCreator::Alibaba), + full_name: Some("Happy Horse 1.0".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::WideFourByThree, + CommonAspectRatio::Square, + CommonAspectRatio::TallThreeByFour, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::SevenTwentyP, + CommonResolution::TenEightyP, + ]), + resolution_default: Some(CommonResolution::SevenTwentyP), + batch_size_options: Some(vec![1, 2, 4]), + batch_size_default: Some(1), + duration_seconds_min: Some(3), + duration_seconds_max: Some(15), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models +} diff --git a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/kling_video_models.rs b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/kling_video_models.rs index e69de29bb2..04de31dcc0 100644 --- a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/kling_video_models.rs +++ b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/kling_video_models.rs @@ -0,0 +1,209 @@ +use artcraft_api_defs::omni_gen::models::omni_gen_video_models::OmniGenVideoModelDetails; +use enums::common::generation::common_aspect_ratio::CommonAspectRatio; +use enums::common::generation::common_video_model::CommonVideoModel; +use enums::common::generation::model_creator::ModelCreator; + +/// Active Kling video models (shown in the list). +pub fn kling_video_models() -> Vec { + let mut models = Vec::new(); + + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::Kling16Pro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 1.6 Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + image_references_supported: Some(true), // NB: 1.6 Elements! + image_references_max: Some(4), // NB: 1.6 Elements! + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::Square, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + // TODO: Kling 2.5 doesn't let you control aspect ratio for image-to-video + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::Kling2p5TurboPro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 2.5 Turbo Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::Square, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + // TODO: Kling 2.6 doesn't let you control aspect ratio for image-to-video + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::Kling2p6Pro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 2.6 Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::Square, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models +} + +/// Disabled (coming-soon / hidden) Kling video models. +pub fn kling_disabled_video_models() -> Vec { + let mut models = Vec::new(); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Kling16Pro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 1.6 Pro".to_string()), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Square, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Kling21Pro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 2.1 Pro".to_string()), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Square, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Kling21Master, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 2.1 Master".to_string()), + starting_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Square, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Kling2p5TurboPro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 2.5 Turbo Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Square, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Kling2p6Pro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 2.6 Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Square, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_options: Some(vec![5, 10]), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Kling3p0Pro, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 3.0 Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Square, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_min: Some(3), + duration_seconds_max: Some(15), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Kling3p0Standard, + model_creator: Some(ModelCreator::Kling), + full_name: Some("Kling 3.0 Standard".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Square, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_min: Some(3), + duration_seconds_max: Some(15), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models +} diff --git a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/seedance_1p5_video_models.rs b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/seedance_1p5_video_models.rs index e69de29bb2..418b8cbddc 100644 --- a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/seedance_1p5_video_models.rs +++ b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/seedance_1p5_video_models.rs @@ -0,0 +1,42 @@ +use artcraft_api_defs::omni_gen::models::omni_gen_video_models::OmniGenVideoModelDetails; +use enums::common::generation::common_aspect_ratio::CommonAspectRatio; +use enums::common::generation::common_resolution::CommonResolution; +use enums::common::generation::common_video_model::CommonVideoModel; +use enums::common::generation::model_creator::ModelCreator; + +/// Seedance 1.5 video models. +pub fn seedance_1p5_video_models() -> Vec { + let mut models = Vec::new(); + + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::Seedance1p5Pro, + model_creator: Some(ModelCreator::Bytedance), + full_name: Some("Seedance 1.5 Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideTwentyOneByNine, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::WideFourByThree, + CommonAspectRatio::Square, + CommonAspectRatio::TallThreeByFour, + CommonAspectRatio::TallNineBySixteen, + CommonAspectRatio::Auto, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::FourEightyP, + CommonResolution::SevenTwentyP, + CommonResolution::TenEightyP, + ]), + resolution_default: Some(CommonResolution::TenEightyP), + duration_seconds_min: Some(4), + duration_seconds_max: Some(12), + duration_seconds_default: Some(8), + ..Default::default() + }); + + models +} diff --git a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/sora_video_models.rs b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/sora_video_models.rs index e69de29bb2..7ff2b64c42 100644 --- a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/sora_video_models.rs +++ b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/sora_video_models.rs @@ -0,0 +1,53 @@ +use artcraft_api_defs::omni_gen::models::omni_gen_video_models::OmniGenVideoModelDetails; +use enums::common::generation::common_aspect_ratio::CommonAspectRatio; +use enums::common::generation::common_resolution::CommonResolution; +use enums::common::generation::common_video_model::CommonVideoModel; +use enums::common::generation::model_creator::ModelCreator; + +/// Sora (OpenAI) video models. +pub fn sora_video_models() -> Vec { + let mut models = Vec::new(); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Sora2, + model_creator: Some(ModelCreator::OpenAi), + full_name: Some("Sora 2".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![CommonResolution::SevenTwentyP]), + resolution_default: Some(CommonResolution::SevenTwentyP), + duration_seconds_options: Some(vec![4, 8, 12]), + duration_seconds_default: Some(4), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Sora2Pro, + model_creator: Some(ModelCreator::OpenAi), + full_name: Some("Sora 2 Pro".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::SevenTwentyP, + CommonResolution::TenEightyP, + ]), + resolution_default: Some(CommonResolution::TenEightyP), + duration_seconds_options: Some(vec![4, 8, 12]), + duration_seconds_default: Some(4), + ..Default::default() + }); + + models +} diff --git a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/veo_video_models.rs b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/veo_video_models.rs index e69de29bb2..950de8f659 100644 --- a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/veo_video_models.rs +++ b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/by_type/veo_video_models.rs @@ -0,0 +1,129 @@ +use artcraft_api_defs::omni_gen::models::omni_gen_video_models::OmniGenVideoModelDetails; +use enums::common::generation::common_aspect_ratio::CommonAspectRatio; +use enums::common::generation::common_resolution::CommonResolution; +use enums::common::generation::common_video_model::CommonVideoModel; +use enums::common::generation::model_creator::ModelCreator; + +/// Veo (Google) video models. +pub fn veo_video_models() -> Vec { + let mut models = Vec::new(); + + // TODO(bt,2026-04-10): Veo 2 image-to-video doesn't support aspect ratio + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Veo2, + model_creator: Some(ModelCreator::Google), + full_name: Some("Veo 2".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + // TODO(bt,2026-04-10): Veo 2 image-to-video doesn't support aspect ratio + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Auto, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + duration_seconds_min: Some(5), + duration_seconds_max: Some(8), + duration_seconds_default: Some(5), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Veo3, + model_creator: Some(ModelCreator::Google), + full_name: Some("Veo 3".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + CommonAspectRatio::Auto, // TODO: Only for image-to-video + ]), + // TODO: image-to-video aspect ratio options + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::SevenTwentyP, + CommonResolution::TenEightyP, + ]), + resolution_default: Some(CommonResolution::TenEightyP), + duration_seconds_min: Some(4), + duration_seconds_max: Some(8), + duration_seconds_default: Some(8), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + model: CommonVideoModel::Veo3Fast, + model_creator: Some(ModelCreator::Google), + full_name: Some("Veo 3 Fast".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + resolution_options: Some(vec![ + CommonResolution::SevenTwentyP, + CommonResolution::TenEightyP, + ]), + resolution_default: Some(CommonResolution::TenEightyP), + duration_seconds_min: Some(4), + duration_seconds_max: Some(8), + duration_seconds_default: Some(8), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Veo3p1, + model_creator: Some(ModelCreator::Google), + full_name: Some("Veo 3.1".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Auto, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::SevenTwentyP, + CommonResolution::TenEightyP, + ]), + resolution_default: Some(CommonResolution::TenEightyP), + duration_seconds_min: Some(4), + duration_seconds_max: Some(8), + duration_seconds_default: Some(8), + ..Default::default() + }); + + models.push(OmniGenVideoModelDetails { + is_disabled: Some(true), // TODO: Temporarily disable + model: CommonVideoModel::Veo3p1Fast, + model_creator: Some(ModelCreator::Google), + full_name: Some("Veo 3.1 Fast".to_string()), + text_prompt_supported: Some(true), + starting_keyframe_supported: Some(true), + ending_keyframe_supported: Some(true), + show_generate_with_sound_toggle: Some(true), + aspect_ratio_options: Some(vec![ + CommonAspectRatio::Auto, + CommonAspectRatio::WideSixteenByNine, + CommonAspectRatio::TallNineBySixteen, + ]), + aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), + resolution_options: Some(vec![ + CommonResolution::SevenTwentyP, + CommonResolution::TenEightyP, + ]), + resolution_default: Some(CommonResolution::TenEightyP), + duration_seconds_min: Some(4), + duration_seconds_max: Some(8), + duration_seconds_default: Some(8), + ..Default::default() + }); + + models +} diff --git a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/video_models.rs b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/video_models.rs index fe7fedd10e..96e7c6dc9f 100644 --- a/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/video_models.rs +++ b/crates/service/web/storyteller_web/src/configs/omni_gen/video_models/video_models.rs @@ -6,7 +6,13 @@ use enums::common::generation::model_creator::ModelCreator; use enums::common::generation_provider::GenerationProvider; use once_cell::sync::Lazy; +use super::by_type::grok_video_models::grok_video_models; +use super::by_type::happy_horse_video_models::happy_horse_video_models; +use super::by_type::kling_video_models::{kling_disabled_video_models, kling_video_models}; +use super::by_type::seedance_1p5_video_models::seedance_1p5_video_models; use super::by_type::seedance_2p0_video_models::seedance_2p0_video_models; +use super::by_type::sora_video_models::sora_video_models; +use super::by_type::veo_video_models::veo_video_models; pub const OMNI_GEN_VIDEO_MODELS_AND_PROVIDERS: Lazy = Lazy::new(|| { let models = build_omni_gen_video_models(); @@ -21,452 +27,15 @@ pub const OMNI_GEN_VIDEO_MODELS_AND_PROVIDERS: Lazy fn build_omni_gen_video_models() -> Vec { let mut models = Vec::new(); - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::GrokImagineVideo, - model_creator: Some(ModelCreator::Grok), - full_name: Some("Grok Imagine".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(false), - image_references_supported: Some(true), - image_references_max: Some(7), - //video_references_supported: Some(false), - //video_references_max: Some(3), - //video_references_max_total_duration_seconds: Some(15), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Auto, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::WideFourByThree, - CommonAspectRatio::WideThreeByTwo, - CommonAspectRatio::Square, - CommonAspectRatio::TallTwoByThree, - CommonAspectRatio::TallThreeByFour, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::FourEightyP, - CommonResolution::SevenTwentyP, - ]), - resolution_default: Some(CommonResolution::SevenTwentyP), - //batch_size_options: Some(vec![1, 2, 4]), - //batch_size_default: Some(1), - duration_seconds_min: Some(1), - duration_seconds_max: Some(15), - duration_seconds_max_with_image_references: Some(10), - duration_seconds_default: Some(8), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::GrokImagineVideo1p5, - model_creator: Some(ModelCreator::Grok), - full_name: Some("Grok Imagine 1.5 Preview".to_string()), - extra_info: Some("Fast and high quality".to_string()), - extra_info_short: Some("Fast and high quality".to_string()), - text_to_video_supported: Some(false), // NB: This might be temporary - text_prompt_supported: Some(true), - text_prompt_max_length: Some(4096), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(false), - image_references_supported: Some(false), - //image_references_max: Some(7), - //video_references_supported: Some(false), - //video_references_max: Some(3), - //video_references_max_total_duration_seconds: Some(15), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Auto, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::WideFourByThree, - CommonAspectRatio::WideThreeByTwo, - CommonAspectRatio::Square, - CommonAspectRatio::TallTwoByThree, - CommonAspectRatio::TallThreeByFour, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::FourEightyP, - CommonResolution::SevenTwentyP, - ]), - resolution_default: Some(CommonResolution::SevenTwentyP), - //batch_size_options: Some(vec![1, 2, 4]), - //batch_size_default: Some(1), - duration_seconds_min: Some(1), - duration_seconds_max: Some(15), - duration_seconds_max_with_image_references: Some(10), - duration_seconds_default: Some(8), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::HappyHorse1p0, - model_creator: Some(ModelCreator::Alibaba), - full_name: Some("Happy Horse 1.0".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::WideFourByThree, - CommonAspectRatio::Square, - CommonAspectRatio::TallThreeByFour, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::SevenTwentyP, - CommonResolution::TenEightyP, - ]), - resolution_default: Some(CommonResolution::SevenTwentyP), - batch_size_options: Some(vec![1, 2, 4]), - batch_size_default: Some(1), - duration_seconds_min: Some(3), - duration_seconds_max: Some(15), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::Kling16Pro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 1.6 Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - image_references_supported: Some(true), // NB: 1.6 Elements! - image_references_max: Some(4), // NB: 1.6 Elements! - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::Square, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - // TODO: Kling 2.5 doesn't let you control aspect ratio for image-to-video - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::Kling2p5TurboPro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 2.5 Turbo Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::Square, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - // TODO: Kling 2.6 doesn't let you control aspect ratio for image-to-video - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::Kling2p6Pro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 2.6 Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::Square, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::Seedance1p5Pro, - model_creator: Some(ModelCreator::Bytedance), - full_name: Some("Seedance 1.5 Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideTwentyOneByNine, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::WideFourByThree, - CommonAspectRatio::Square, - CommonAspectRatio::TallThreeByFour, - CommonAspectRatio::TallNineBySixteen, - CommonAspectRatio::Auto, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::FourEightyP, - CommonResolution::SevenTwentyP, - CommonResolution::TenEightyP, - ]), - resolution_default: Some(CommonResolution::TenEightyP), - duration_seconds_min: Some(4), - duration_seconds_max: Some(12), - duration_seconds_default: Some(8), - ..Default::default() - }); - - // Seedance 2.0 family (see by_type/seedance_2p0_video_models.rs). + models.extend(grok_video_models()); + models.extend(happy_horse_video_models()); + models.extend(kling_video_models()); + models.extend(seedance_1p5_video_models()); models.extend(seedance_2p0_video_models()); + models.extend(veo_video_models()); + models.extend(kling_disabled_video_models()); - // TODO(bt,2026-04-10): Veo 2 image-to-video doesn't support aspect ratio - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Veo2, - model_creator: Some(ModelCreator::Google), - full_name: Some("Veo 2".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - // TODO(bt,2026-04-10): Veo 2 image-to-video doesn't support aspect ratio - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Auto, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_min: Some(5), - duration_seconds_max: Some(8), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Veo3, - model_creator: Some(ModelCreator::Google), - full_name: Some("Veo 3".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - CommonAspectRatio::Auto, // TODO: Only for image-to-video - ]), - // TODO: image-to-video aspect ratio options - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::SevenTwentyP, - CommonResolution::TenEightyP, - ]), - resolution_default: Some(CommonResolution::TenEightyP), - duration_seconds_min: Some(4), - duration_seconds_max: Some(8), - duration_seconds_default: Some(8), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - model: CommonVideoModel::Veo3Fast, - model_creator: Some(ModelCreator::Google), - full_name: Some("Veo 3 Fast".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - resolution_options: Some(vec![ - CommonResolution::SevenTwentyP, - CommonResolution::TenEightyP, - ]), - resolution_default: Some(CommonResolution::TenEightyP), - duration_seconds_min: Some(4), - duration_seconds_max: Some(8), - duration_seconds_default: Some(8), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Veo3p1, - model_creator: Some(ModelCreator::Google), - full_name: Some("Veo 3.1".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Auto, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::SevenTwentyP, - CommonResolution::TenEightyP, - ]), - resolution_default: Some(CommonResolution::TenEightyP), - duration_seconds_min: Some(4), - duration_seconds_max: Some(8), - duration_seconds_default: Some(8), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Veo3p1Fast, - model_creator: Some(ModelCreator::Google), - full_name: Some("Veo 3.1 Fast".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Auto, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::SevenTwentyP, - CommonResolution::TenEightyP, - ]), - resolution_default: Some(CommonResolution::TenEightyP), - duration_seconds_min: Some(4), - duration_seconds_max: Some(8), - duration_seconds_default: Some(8), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Kling16Pro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 1.6 Pro".to_string()), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Square, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Kling21Pro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 2.1 Pro".to_string()), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Square, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Kling21Master, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 2.1 Master".to_string()), - starting_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Square, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Kling2p5TurboPro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 2.5 Turbo Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Square, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Kling2p6Pro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 2.6 Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Square, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_options: Some(vec![5, 10]), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Kling3p0Pro, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 3.0 Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Square, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_min: Some(3), - duration_seconds_max: Some(15), - duration_seconds_default: Some(5), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Kling3p0Standard, - model_creator: Some(ModelCreator::Kling), - full_name: Some("Kling 3.0 Standard".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - ending_keyframe_supported: Some(true), - show_generate_with_sound_toggle: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::Square, - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - duration_seconds_min: Some(3), - duration_seconds_max: Some(15), - duration_seconds_default: Some(5), - ..Default::default() - }); - + // Seedance 1.0 Lite (not part of a moved model family). models.push(OmniGenVideoModelDetails { is_disabled: Some(true), // TODO: Temporarily disable model: CommonVideoModel::Seedance10Lite, @@ -495,46 +64,7 @@ fn build_omni_gen_video_models() -> Vec { ..Default::default() }); - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Sora2, - model_creator: Some(ModelCreator::OpenAi), - full_name: Some("Sora 2".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![CommonResolution::SevenTwentyP]), - resolution_default: Some(CommonResolution::SevenTwentyP), - duration_seconds_options: Some(vec![4, 8, 12]), - duration_seconds_default: Some(4), - ..Default::default() - }); - - models.push(OmniGenVideoModelDetails { - is_disabled: Some(true), // TODO: Temporarily disable - model: CommonVideoModel::Sora2Pro, - model_creator: Some(ModelCreator::OpenAi), - full_name: Some("Sora 2 Pro".to_string()), - text_prompt_supported: Some(true), - starting_keyframe_supported: Some(true), - aspect_ratio_options: Some(vec![ - CommonAspectRatio::WideSixteenByNine, - CommonAspectRatio::TallNineBySixteen, - ]), - aspect_ratio_default: Some(CommonAspectRatio::WideSixteenByNine), - resolution_options: Some(vec![ - CommonResolution::SevenTwentyP, - CommonResolution::TenEightyP, - ]), - resolution_default: Some(CommonResolution::TenEightyP), - duration_seconds_options: Some(vec![4, 8, 12]), - duration_seconds_default: Some(4), - ..Default::default() - }); + models.extend(sora_video_models()); models }