move other models

This commit is contained in:
Brandon Thomas
2026-06-24 13:31:04 -04:00
parent ce32353767
commit e954e6700f
7 changed files with 576 additions and 484 deletions
@@ -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<OmniGenVideoModelDetails> {
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
}
@@ -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<OmniGenVideoModelDetails> {
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
}
@@ -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<OmniGenVideoModelDetails> {
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<OmniGenVideoModelDetails> {
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
}
@@ -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<OmniGenVideoModelDetails> {
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
}
@@ -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<OmniGenVideoModelDetails> {
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
}
@@ -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<OmniGenVideoModelDetails> {
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
}
@@ -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<OmniGenVideoModelsResponse> = Lazy::new(|| {
let models = build_omni_gen_video_models();
@@ -21,452 +27,15 @@ pub const OMNI_GEN_VIDEO_MODELS_AND_PROVIDERS: Lazy<OmniGenVideoModelsResponse>
fn build_omni_gen_video_models() -> Vec<OmniGenVideoModelDetails> {
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<OmniGenVideoModelDetails> {
..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
}