mirror of
https://github.com/storytold/artcraft.git
synced 2026-10-30 15:25:57 -04:00
Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b39b31fe48 | ||
|
|
68e4c5fb9b | ||
|
|
35cee6732e | ||
|
|
794041d646 | ||
|
|
ab2534169f | ||
|
|
1841e4104e | ||
|
|
13051b69d4 | ||
|
|
f73cee0787 | ||
|
|
02068236a3 | ||
|
|
802c8a0f2a | ||
|
|
8481e9de7c | ||
|
|
b1e1a0270e | ||
|
|
a324b04a1d |
+5
@@ -295,6 +295,11 @@ pub async fn validate_and_save_results(args: SaveResultsArgs<'_>) -> Result<Medi
|
||||
maybe_positive_prompt: args.comfy_args.positive_prompt.as_deref(),
|
||||
maybe_negative_prompt: args.comfy_args.negative_prompt.as_deref(),
|
||||
maybe_other_args: maybe_other_args.as_ref(),
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &args.job.creator_ip_address,
|
||||
mysql_executor: &args.deps.db.mysql_pool,
|
||||
phantom: Default::default(),
|
||||
|
||||
@@ -323,22 +323,22 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux
|
||||
crate::http_server::endpoints::featured_items::create_featured_item_handler::create_featured_item_handler,
|
||||
crate::http_server::endpoints::featured_items::delete_featured_item_handler::delete_featured_item_handler,
|
||||
crate::http_server::endpoints::featured_items::get_is_featured_item_handler::get_is_featured_item_handler,
|
||||
crate::http_server::endpoints::generate::image::generate_flux_1_dev_text_to_image_handler::generate_flux_1_dev_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::generate_flux_1_schnell_text_to_image_handler::generate_flux_1_schnell_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::generate_flux_pro_11_text_to_image_handler::generate_flux_pro_11_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::generate_gpt_image_1_text_to_image_handler::generate_gpt_image_1_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image_handler::generate_flux_pro_11_ultra_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::remove_image_background_handler::remove_image_background_handler,
|
||||
crate::http_server::endpoints::generate::image::text::generate_flux_1_dev_text_to_image_handler::generate_flux_1_dev_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::text::generate_flux_1_schnell_text_to_image_handler::generate_flux_1_schnell_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::text::generate_flux_pro_11_text_to_image_handler::generate_flux_pro_11_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::text::generate_gpt_image_1_text_to_image_handler::generate_gpt_image_1_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::text::generate_flux_pro_11_ultra_text_to_image_handler::generate_flux_pro_11_ultra_text_to_image_handler,
|
||||
crate::http_server::endpoints::generate::image::bg_removal::remove_image_background_handler::remove_image_background_handler,
|
||||
crate::http_server::endpoints::generate::image::edit::gpt_image_1_edit_image_handler::gpt_image_1_edit_image_handler,
|
||||
crate::http_server::endpoints::generate::object::generate_hunyuan_2_1_image_to_3d_handler::generate_hunyuan_2_1_image_to_3d_handler,
|
||||
crate::http_server::endpoints::generate::object::generate_hunyuan_2_0_image_to_3d_handler::generate_hunyuan_2_0_image_to_3d_handler,
|
||||
crate::http_server::endpoints::generate::splat::generate_worldlabs_marble_0p1_mini_splat_handler::generate_worldlabs_marble_0p1_mini_splat_handler,
|
||||
crate::http_server::endpoints::generate::splat::generate_worldlabs_marble_0p1_plus_splat_handler::generate_worldlabs_marble_0p1_plus_splat_handler,
|
||||
crate::http_server::endpoints::generate::video::generate_kling_1_6_pro_video_handler::generate_kling_1_6_pro_video_handler,
|
||||
crate::http_server::endpoints::generate::video::generate_kling_2_1_master_video_handler::generate_kling_2_1_master_video_handler,
|
||||
crate::http_server::endpoints::generate::video::generate_kling_2_1_pro_video_handler::generate_kling_2_1_pro_video_handler,
|
||||
crate::http_server::endpoints::generate::video::generate_seedance_1_0_lite_image_to_video_handler::generate_seedance_1_0_lite_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::generate_veo_2_image_to_video_handler::generate_veo_2_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_kling_1_6_pro_video_handler::generate_kling_1_6_pro_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_kling_2_1_master_video_handler::generate_kling_2_1_master_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_kling_2_1_pro_video_handler::generate_kling_2_1_pro_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_seedance_1_0_lite_image_to_video_handler::generate_seedance_1_0_lite_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_veo_2_image_to_video_handler::generate_veo_2_image_to_video_handler,
|
||||
crate::http_server::endpoints::image_studio::upload::upload_snapshot_media_file_handler::upload_snapshot_media_file_handler,
|
||||
crate::http_server::endpoints::inference_job::delete::dismiss_finished_session_jobs_handler::dismiss_finished_session_jobs_handler,
|
||||
crate::http_server::endpoints::inference_job::delete::terminate_inference_job_handler::terminate_inference_job_handler,
|
||||
@@ -439,9 +439,9 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux
|
||||
crate::http_server::endpoints::generate::image::inpaint::flux_dev_juggernaut_inpaint_handler::flux_dev_juggernaut_inpaint_image_handler,
|
||||
crate::http_server::endpoints::generate::image::inpaint::flux_pro_1_inpaint_handler::flux_pro_1_inpaint_image_handler,
|
||||
// Generate Videos
|
||||
crate::http_server::endpoints::generate::video::generate_seedance_1_0_pro_image_to_video_handler::generate_seedance_1_0_pro_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::generate_veo_3_image_to_video_handler::generate_veo_3_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::generate_veo_3_fast_image_to_video_handler::generate_veo_3_fast_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_seedance_1_0_pro_image_to_video_handler::generate_seedance_1_0_pro_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_veo_3_image_to_video_handler::generate_veo_3_image_to_video_handler,
|
||||
crate::http_server::endpoints::generate::video::image::generate_veo_3_fast_image_to_video_handler::generate_veo_3_fast_image_to_video_handler,
|
||||
// Generate Video (Multi-Function)
|
||||
crate::http_server::endpoints::generate::video::multi_function::kling_2p5_turbo_pro_multi_function_video_gen_handler::kling_2p5_turbo_pro_multi_function_video_gen_handler,
|
||||
crate::http_server::endpoints::generate::video::multi_function::kling_2p6_pro_multi_function_video_gen_handler::kling_2p6_pro_multi_function_video_gen_handler,
|
||||
|
||||
+17
-3
@@ -14,6 +14,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::angle::enqueue_flux_2_lora_edit_image_angle_webhook::{enqueue_flux_2_lora_edit_image_angle_webhook, EnqueueFlux2LoraEditImageAngleArgs, EnqueueFlux2LoraAngleNumImages, EnqueueFlux2LoraAngleImageSize};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -173,10 +175,22 @@ pub async fn flux_2_lora_edit_image_angle_handler(
|
||||
maybe_positive_prompt: None,
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Edit),
|
||||
maybe_aspect_ratio: request.image_size.map(|size| match size {
|
||||
Flux2LoraEditImageAngleImageSize::Square => CommonAspectRatio::Square,
|
||||
Flux2LoraEditImageAngleImageSize::SquareHd => CommonAspectRatio::SquareHd,
|
||||
Flux2LoraEditImageAngleImageSize::PortraitFourThree => CommonAspectRatio::TallThreeByFour,
|
||||
Flux2LoraEditImageAngleImageSize::PortraitSixteenNine => CommonAspectRatio::TallNineBySixteen,
|
||||
Flux2LoraEditImageAngleImageSize::LandscapeFourThree => CommonAspectRatio::WideFourByThree,
|
||||
Flux2LoraEditImageAngleImageSize::LandscapeSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count: request.num_images.map(|n| match n {
|
||||
Flux2LoraEditImageAngleNumImages::One => 1,
|
||||
Flux2LoraEditImageAngleNumImages::Two => 2,
|
||||
Flux2LoraEditImageAngleNumImages::Three => 3,
|
||||
Flux2LoraEditImageAngleNumImages::Four => 4,
|
||||
}),
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+17
-3
@@ -14,6 +14,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::angle::enqueue_qwen_edit_2511_edit_image_angle_webhook::{enqueue_qwen_edit_2511_edit_image_angle_webhook, EnqueueQwenEdit2511EditImageAngleArgs, EnqueueQwenEdit2511AngleNumImages, EnqueueQwenEdit2511AngleImageSize};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -174,10 +176,22 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
|
||||
maybe_positive_prompt: request.additional_prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Edit),
|
||||
maybe_aspect_ratio: request.image_size.map(|size| match size {
|
||||
QwenEdit2511EditImageAngleImageSize::Square => CommonAspectRatio::Square,
|
||||
QwenEdit2511EditImageAngleImageSize::SquareHd => CommonAspectRatio::SquareHd,
|
||||
QwenEdit2511EditImageAngleImageSize::PortraitFourThree => CommonAspectRatio::TallThreeByFour,
|
||||
QwenEdit2511EditImageAngleImageSize::PortraitSixteenNine => CommonAspectRatio::TallNineBySixteen,
|
||||
QwenEdit2511EditImageAngleImageSize::LandscapeFourThree => CommonAspectRatio::WideFourByThree,
|
||||
QwenEdit2511EditImageAngleImageSize::LandscapeSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count: request.num_images.map(|n| match n {
|
||||
QwenEdit2511EditImageAngleNumImages::One => 1,
|
||||
QwenEdit2511EditImageAngleNumImages::Two => 2,
|
||||
QwenEdit2511EditImageAngleNumImages::Three => 3,
|
||||
QwenEdit2511EditImageAngleNumImages::Four => 4,
|
||||
}),
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
pub mod remove_image_background_handler;
|
||||
+11
-2
@@ -16,6 +16,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_flux_pro_kontext_max_edit_webhook::{enqueue_flux_pro_kontext_max_edit_webhook, FluxProKontextMaxArgs, FluxProKontextMaxNumImages};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -207,6 +208,14 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(FluxProKontextMaxEditImageNumImages::One) => Some(1),
|
||||
Some(FluxProKontextMaxEditImageNumImages::Two) => Some(2),
|
||||
Some(FluxProKontextMaxEditImageNumImages::Three) => Some(3),
|
||||
Some(FluxProKontextMaxEditImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -218,10 +227,10 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Edit), // TODO: This endpoint only supports "edit" (and not "text") for now
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+11
-2
@@ -17,6 +17,7 @@ use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::payments_namespace::PaymentsNamespace;
|
||||
use enums::common::stripe_subscription_status::StripeSubscriptionStatus;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_gemini_25_flash_edit_webhook::{enqueue_gemini_25_flash_edit_webhook, Gemini25FlashEditArgs, Gemini25FlashEditNumImages};
|
||||
use fal_client::requests::webhook::image::edit::enqueue_gpt_image_1_edit_image_webhook::enqueue_gpt_image_1_edit_image_webhook;
|
||||
@@ -226,6 +227,14 @@ pub async fn gemini_25_flash_edit_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(Gemini25FlashEditImageNumImages::One) => Some(1),
|
||||
Some(Gemini25FlashEditImageNumImages::Two) => Some(2),
|
||||
Some(Gemini25FlashEditImageNumImages::Three) => Some(3),
|
||||
Some(Gemini25FlashEditImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -235,10 +244,10 @@ pub async fn gemini_25_flash_edit_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Edit), // TODO: This endpoint only supports "edit" (and not "text") for now
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+20
-3
@@ -18,6 +18,8 @@ use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::payments_namespace::PaymentsNamespace;
|
||||
use enums::common::stripe_subscription_status::StripeSubscriptionStatus;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_gpt_image_1_edit_image_webhook::enqueue_gpt_image_1_edit_image_webhook;
|
||||
@@ -248,6 +250,21 @@ pub async fn gpt_image_1_edit_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.image_size {
|
||||
Some(GptImage1EditImageImageSize::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(GptImage1EditImageImageSize::Horizontal) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(GptImage1EditImageImageSize::Vertical) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(GptImage1EditImageNumImages::One) => Some(1),
|
||||
Some(GptImage1EditImageNumImages::Two) => Some(2),
|
||||
Some(GptImage1EditImageNumImages::Three) => Some(3),
|
||||
Some(GptImage1EditImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -257,10 +274,10 @@ pub async fn gpt_image_1_edit_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Edit), // TODO: This endpoint only supports "edit" (and not "text") for now
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+11
-2
@@ -16,6 +16,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_qwen_image_edit_webhook::{enqueue_qwen_image_edit_webhook, QwenImageEditArgs, QwenImageEditNumImages};
|
||||
@@ -200,6 +201,14 @@ pub async fn qwen_edit_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(QwenEditImageNumImages::One) => Some(1),
|
||||
Some(QwenEditImageNumImages::Two) => Some(2),
|
||||
Some(QwenEditImageNumImages::Three) => Some(3),
|
||||
Some(QwenEditImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -209,10 +218,10 @@ pub async fn qwen_edit_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Edit), // TODO: This endpoint only supports "edit" (and not "text") for now
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_seededit_v3_edit_webhook::{enqueue_seededit_v3_edit_webhook, SeedEditV3EditArgs};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -179,7 +180,7 @@ pub async fn seededit_3_edit_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Edit), // TODO: This endpoint only supports "edit" (and not "text") for now
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
|
||||
+8
-2
@@ -15,6 +15,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::webhook::image::infill::enqueue_flux_dev_juggernaut_infill_webhook::{enqueue_flux_dev_juggernaut_infill_webhook, FluxDevJuggernautInfillArgs, FluxDevJuggernautInfillNumImages};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -217,10 +218,15 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Inpaint),
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count: request.num_images.map(|n| match n {
|
||||
FluxDevJuggernautInpaintImageNumImages::One => 1,
|
||||
FluxDevJuggernautInpaintImageNumImages::Two => 2,
|
||||
FluxDevJuggernautInpaintImageNumImages::Three => 3,
|
||||
FluxDevJuggernautInpaintImageNumImages::Four => 4,
|
||||
}),
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+8
-2
@@ -15,6 +15,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::webhook::image::infill::enqueue_flux_pro_1_infill_webhook::{enqueue_flux_pro_1_infill_webhook, FluxPro1InfillArgs, FluxPro1InfillNumImages};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -217,10 +218,15 @@ pub async fn flux_pro_1_inpaint_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Inpaint),
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count: request.num_images.map(|n| match n {
|
||||
FluxPro1InpaintImageNumImages::One => 1,
|
||||
FluxPro1InpaintImageNumImages::Two => 2,
|
||||
FluxPro1InpaintImageNumImages::Three => 3,
|
||||
FluxPro1InpaintImageNumImages::Four => 4,
|
||||
}),
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
pub mod angle;
|
||||
pub mod bg_removal;
|
||||
pub mod edit;
|
||||
pub mod generate_flux_1_dev_text_to_image_handler;
|
||||
pub mod generate_flux_1_schnell_text_to_image_handler;
|
||||
pub mod generate_flux_pro_11_text_to_image_handler;
|
||||
pub mod generate_flux_pro_11_ultra_text_to_image_handler;
|
||||
pub mod generate_gpt_image_1_text_to_image_handler;
|
||||
pub mod inpaint;
|
||||
pub mod remove_image_background_handler;
|
||||
pub mod multi_function;
|
||||
pub mod angle;
|
||||
pub mod text;
|
||||
|
||||
+34
-4
@@ -14,6 +14,9 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_resolution::CommonResolution;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_bytedance_seedream_v5_lite_edit_image_webhook::{enqueue_bytedance_seedream_v5_lite_edit_image_webhook, EnqueueBytedanceSeedreamV5LiteEditImageArgs, EnqueueBytedanceSeedreamV5LiteEditImageNumImages, EnqueueBytedanceSeedreamV5LiteEditImageSize};
|
||||
use fal_client::requests::webhook::image::text::enqueue_bytedance_seedream_v5_lite_text_to_image_webhook::{enqueue_bytedance_seedream_v5_lite_text_to_image_webhook, EnqueueBytedanceSeedreamV5LiteTextToImageArgs, EnqueueBytedanceSeedreamV5LiteTextToImageNumImages, EnqueueBytedanceSeedreamV5LiteTextToImageSize};
|
||||
@@ -100,9 +103,11 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(input_image_urls) = image_urls.as_deref() {
|
||||
info!("seedream 5 lite edit image");
|
||||
generation_mode = CommonGenerationMode::Edit;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(BytedanceSeedream5LiteMultiFunctionImageGenNumImages::One) => EnqueueBytedanceSeedreamV5LiteEditImageNumImages::One,
|
||||
@@ -154,6 +159,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("seedream 5 lite text-to-image");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(BytedanceSeedream5LiteMultiFunctionImageGenNumImages::One) => EnqueueBytedanceSeedreamV5LiteTextToImageNumImages::One,
|
||||
@@ -221,6 +227,30 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
|
||||
CommonWebError::ServerError
|
||||
})?;
|
||||
|
||||
let maybe_aspect_ratio = request.image_size.map(|size| match size {
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::Square => CommonAspectRatio::Square,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::SquareHd => CommonAspectRatio::SquareHd,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::PortraitFourThree => CommonAspectRatio::TallThreeByFour,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::PortraitSixteenNine => CommonAspectRatio::TallNineBySixteen,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::LandscapeFourThree => CommonAspectRatio::WideFourByThree,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::LandscapeSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::Auto2k => CommonAspectRatio::Auto2k,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::Auto3k => CommonAspectRatio::Auto,
|
||||
});
|
||||
|
||||
let maybe_resolution = request.image_size.and_then(|size| match size {
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::Auto2k => Some(CommonResolution::TwoK),
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenImageSize::Auto3k => Some(CommonResolution::ThreeK),
|
||||
_ => None,
|
||||
});
|
||||
|
||||
let maybe_batch_count: Option<u8> = request.num_images.map(|n| match n {
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenNumImages::One => 1,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenNumImages::Two => 2,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenNumImages::Three => 3,
|
||||
BytedanceSeedream5LiteMultiFunctionImageGenNumImages::Four => 4,
|
||||
});
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -230,10 +260,10 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+29
-3
@@ -19,6 +19,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_bytedance_seedream_v4_edit_image_webhook::{enqueue_bytedance_seedream_v4_edit_image_webhook, EnqueueBytedanceSeedreamV4EditImageArgs, EnqueueBytedanceSeedreamV4EditImageNumImages, EnqueueBytedanceSeedreamV4EditImageSize};
|
||||
@@ -113,9 +115,11 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(input_image_urls) = image_urls.as_deref() {
|
||||
info!("edit image case");
|
||||
generation_mode = CommonGenerationMode::Edit;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenNumImages::One) => EnqueueBytedanceSeedreamV4EditImageNumImages::One,
|
||||
@@ -172,6 +176,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-image case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenNumImages::One) => EnqueueBytedanceSeedreamV4TextToImageNumImages::One,
|
||||
@@ -245,6 +250,27 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.image_size {
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::SquareHd) => Some(CommonAspectRatio::SquareHd),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitFourThree) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeFourThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::Auto) => Some(CommonAspectRatio::Auto),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::Auto2k) => Some(CommonAspectRatio::Auto2k),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenImageSize::Auto4k) => Some(CommonAspectRatio::Auto4k),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenNumImages::One) => Some(1),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenNumImages::Two) => Some(2),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenNumImages::Three) => Some(3),
|
||||
Some(BytedanceSeedreamV4MultiFunctionImageGenNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -254,10 +280,10 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+28
-3
@@ -19,6 +19,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_bytedance_seedream_v4p5_edit_image_webhook::{enqueue_bytedance_seedream_v4p5_edit_image_webhook, EnqueueBytedanceSeedreamV4p5EditImageArgs, EnqueueBytedanceSeedreamV4p5EditImageNumImages, EnqueueBytedanceSeedreamV4p5EditImageSize};
|
||||
@@ -113,9 +115,11 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(input_image_urls) = image_urls.as_deref() {
|
||||
info!("edit image case");
|
||||
generation_mode = CommonGenerationMode::Edit;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenNumImages::One) => EnqueueBytedanceSeedreamV4p5EditImageNumImages::One,
|
||||
@@ -171,6 +175,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-image case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenNumImages::One) => EnqueueBytedanceSeedreamV4p5TextToImageNumImages::One,
|
||||
@@ -243,6 +248,26 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.image_size {
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::SquareHd) => Some(CommonAspectRatio::SquareHd),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitFourThree) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeFourThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Auto2k) => Some(CommonAspectRatio::Auto2k),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Auto4k) => Some(CommonAspectRatio::Auto4k),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenNumImages::One) => Some(1),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenNumImages::Two) => Some(2),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenNumImages::Three) => Some(3),
|
||||
Some(BytedanceSeedreamV4p5MultiFunctionImageGenNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -252,10 +277,10 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+23
-3
@@ -21,6 +21,8 @@ use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::payments_namespace::PaymentsNamespace;
|
||||
use enums::common::stripe_subscription_status::StripeSubscriptionStatus;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_gpt_image_1p5_edit_image_webhook::{enqueue_gpt_image_1p5_image_edit_webhook, EnqueueGptImage1p5EditImageArgs, EnqueueGptImage1p5EditImageBackground, EnqueueGptImage1p5EditImageInputFidelity, EnqueueGptImage1p5EditImageNumImages, EnqueueGptImage1p5EditImageQuality, EnqueueGptImage1p5EditImageSize};
|
||||
@@ -173,9 +175,11 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(input_image_urls) = maybe_image_urls.as_deref() {
|
||||
info!("gpt image 1.5 edit image");
|
||||
generation_mode = CommonGenerationMode::Edit;
|
||||
|
||||
let mut num_images = match request.num_images {
|
||||
Some(GptImage1p5MultiFunctionImageGenNumImages::One) => EnqueueGptImage1p5EditImageNumImages::One,
|
||||
@@ -250,6 +254,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("gpt image 1.5 text-to-image");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let mut num_images = match request.num_images {
|
||||
Some(GptImage1p5MultiFunctionImageGenNumImages::One) => EnqueueGptImage1p5TextToImageNumImages::One,
|
||||
@@ -333,6 +338,21 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.image_size {
|
||||
Some(GptImage1p5MultiFunctionImageGenSize::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(GptImage1p5MultiFunctionImageGenSize::Wide) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(GptImage1p5MultiFunctionImageGenSize::Tall) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(GptImage1p5MultiFunctionImageGenNumImages::One) => Some(1),
|
||||
Some(GptImage1p5MultiFunctionImageGenNumImages::Two) => Some(2),
|
||||
Some(GptImage1p5MultiFunctionImageGenNumImages::Three) => Some(3),
|
||||
Some(GptImage1p5MultiFunctionImageGenNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -342,10 +362,10 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+41
-4
@@ -14,6 +14,9 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_resolution::CommonResolution;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_nano_banana_2_edit_image_webhook::{enqueue_nano_banana_2_edit_image_webhook, EnqueueNanoBanana2EditImageArgs, EnqueueNanoBanana2EditImageAspectRatio, EnqueueNanoBanana2EditImageNumImages, EnqueueNanoBanana2EditImageResolution};
|
||||
use fal_client::requests::webhook::image::text::enqueue_nano_banana_2_text_to_image_webhook::{enqueue_nano_banana_2_text_to_image_webhook, EnqueueNanoBanana2TextToImageArgs, EnqueueNanoBanana2TextToImageAspectRatio, EnqueueNanoBanana2TextToImageNumImages, EnqueueNanoBanana2TextToImageResolution};
|
||||
@@ -100,9 +103,11 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(input_image_urls) = image_urls.as_deref() {
|
||||
info!("nano banana 2 edit image");
|
||||
generation_mode = CommonGenerationMode::Edit;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(NanaBanana2MultiFunctionImageGenNumImages::One) => EnqueueNanoBanana2EditImageNumImages::One,
|
||||
@@ -165,6 +170,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("nano banana 2 text-to-image");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let num_images = match request.num_images {
|
||||
Some(NanaBanana2MultiFunctionImageGenNumImages::One) => EnqueueNanoBanana2TextToImageNumImages::One,
|
||||
@@ -244,6 +250,37 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
|
||||
CommonWebError::ServerError
|
||||
})?;
|
||||
|
||||
let maybe_aspect_ratio = match request.aspect_ratio {
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::Auto) => Some(CommonAspectRatio::Auto),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::OneByOne) => Some(CommonAspectRatio::Square),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::FiveByFour) => Some(CommonAspectRatio::WideFiveByFour),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::FourByThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::ThreeByTwo) => Some(CommonAspectRatio::WideThreeByTwo),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::SixteenByNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::TwentyOneByNine) => Some(CommonAspectRatio::WideTwentyOneByNine),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::FourByFive) => Some(CommonAspectRatio::TallFourByFive),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::ThreeByFour) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::TwoByThree) => Some(CommonAspectRatio::TallTwoByThree),
|
||||
Some(NanaBanana2MultiFunctionImageGenAspectRatio::NineBySixteen) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_resolution = match request.resolution {
|
||||
Some(NanaBanana2MultiFunctionImageGenImageResolution::HalfK) => None,
|
||||
Some(NanaBanana2MultiFunctionImageGenImageResolution::OneK) => Some(CommonResolution::OneK),
|
||||
Some(NanaBanana2MultiFunctionImageGenImageResolution::TwoK) => Some(CommonResolution::TwoK),
|
||||
Some(NanaBanana2MultiFunctionImageGenImageResolution::FourK) => Some(CommonResolution::FourK),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(NanaBanana2MultiFunctionImageGenNumImages::One) => Some(1),
|
||||
Some(NanaBanana2MultiFunctionImageGenNumImages::Two) => Some(2),
|
||||
Some(NanaBanana2MultiFunctionImageGenNumImages::Three) => Some(3),
|
||||
Some(NanaBanana2MultiFunctionImageGenNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -253,10 +290,10 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+31
-3
@@ -22,6 +22,8 @@ use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::payments_namespace::PaymentsNamespace;
|
||||
use enums::common::stripe_subscription_status::StripeSubscriptionStatus;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_gemini_25_flash_edit_webhook::{enqueue_gemini_25_flash_edit_webhook, Gemini25FlashEditArgs, Gemini25FlashEditAspectRatio, Gemini25FlashEditNumImages};
|
||||
@@ -142,9 +144,11 @@ pub async fn nano_banana_multi_function_image_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(input_image_urls) = image_urls.as_deref() {
|
||||
info!("nano banana edit image");
|
||||
generation_mode = CommonGenerationMode::Edit;
|
||||
|
||||
let mut num_images = match request.num_images {
|
||||
Some(NanoBananaMultiFunctionImageGenNumImages::One) => Gemini25FlashEditNumImages::One,
|
||||
@@ -202,6 +206,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("nano banana text-to-image");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let mut num_images = match request.num_images {
|
||||
Some(NanoBananaMultiFunctionImageGenNumImages::One) => Gemini25FlashTextToImageNumImages::One,
|
||||
@@ -276,6 +281,29 @@ pub async fn nano_banana_multi_function_image_gen_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.aspect_ratio {
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::Auto) => Some(CommonAspectRatio::Auto),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::OneByOne) => Some(CommonAspectRatio::Square),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::FiveByFour) => Some(CommonAspectRatio::WideFiveByFour),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::FourByThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::ThreeByTwo) => Some(CommonAspectRatio::WideThreeByTwo),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::SixteenByNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::TwentyOneByNine) => Some(CommonAspectRatio::WideTwentyOneByNine),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::FourByFive) => Some(CommonAspectRatio::TallFourByFive),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::ThreeByFour) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::TwoByThree) => Some(CommonAspectRatio::TallTwoByThree),
|
||||
Some(NanoBananaMultiFunctionImageGenAspectRatio::NineBySixteen) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(NanoBananaMultiFunctionImageGenNumImages::One) => Some(1),
|
||||
Some(NanoBananaMultiFunctionImageGenNumImages::Two) => Some(2),
|
||||
Some(NanoBananaMultiFunctionImageGenNumImages::Three) => Some(3),
|
||||
Some(NanoBananaMultiFunctionImageGenNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -285,10 +313,10 @@ pub async fn nano_banana_multi_function_image_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+40
-4
@@ -21,6 +21,9 @@ use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::payments_namespace::PaymentsNamespace;
|
||||
use enums::common::stripe_subscription_status::StripeSubscriptionStatus;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_resolution::CommonResolution;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::edit::enqueue_nano_banana_pro_edit_image_webhook::{enqueue_nano_banana_pro_image_edit_webhook, EnqueueNanoBananaProEditImageArgs, EnqueueNanoBananaProEditImageAspectRatio, EnqueueNanoBananaProEditImageNumImages, EnqueueNanoBananaProEditImageResolution};
|
||||
@@ -139,9 +142,11 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(input_image_urls) = image_urls.as_deref() {
|
||||
info!("nano banana pro edit image");
|
||||
generation_mode = CommonGenerationMode::Edit;
|
||||
|
||||
let mut num_images = match request.num_images {
|
||||
Some(NanoBananaProMultiFunctionImageGenNumImages::One) => EnqueueNanoBananaProEditImageNumImages::One,
|
||||
@@ -208,6 +213,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("nano banana pro text-to-image");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let mut num_images = match request.num_images {
|
||||
Some(NanoBananaProMultiFunctionImageGenNumImages::One) => EnqueueNanoBananaProTextToImageNumImages::One,
|
||||
@@ -291,6 +297,36 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.aspect_ratio {
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::Auto) => Some(CommonAspectRatio::Auto),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::OneByOne) => Some(CommonAspectRatio::Square),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::FiveByFour) => Some(CommonAspectRatio::WideFiveByFour),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::FourByThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::ThreeByTwo) => Some(CommonAspectRatio::WideThreeByTwo),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::SixteenByNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::TwentyOneByNine) => Some(CommonAspectRatio::WideTwentyOneByNine),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::FourByFive) => Some(CommonAspectRatio::TallFourByFive),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::ThreeByFour) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::TwoByThree) => Some(CommonAspectRatio::TallTwoByThree),
|
||||
Some(NanoBananaProMultiFunctionImageGenAspectRatio::NineBySixteen) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_resolution = match request.resolution {
|
||||
Some(NanoBananaProMultiFunctionImageGenImageResolution::OneK) => Some(CommonResolution::OneK),
|
||||
Some(NanoBananaProMultiFunctionImageGenImageResolution::TwoK) => Some(CommonResolution::TwoK),
|
||||
Some(NanoBananaProMultiFunctionImageGenImageResolution::FourK) => Some(CommonResolution::FourK),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(NanoBananaProMultiFunctionImageGenNumImages::One) => Some(1),
|
||||
Some(NanoBananaProMultiFunctionImageGenNumImages::Two) => Some(2),
|
||||
Some(NanoBananaProMultiFunctionImageGenNumImages::Three) => Some(3),
|
||||
Some(NanoBananaProMultiFunctionImageGenNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -300,10 +336,10 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+24
-4
@@ -15,6 +15,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_1_dev_text_to_image_webhook::enqueue_flux_1_dev_text_to_image_webhook;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_1_dev_text_to_image_webhook::{Flux1DevArgs, Flux1DevAspectRatio, Flux1DevNumImages};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -187,6 +189,24 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.aspect_ratio {
|
||||
Some(GenerateFlux1DevTextToImageAspectRatio::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(GenerateFlux1DevTextToImageAspectRatio::SquareHd) => Some(CommonAspectRatio::SquareHd),
|
||||
Some(GenerateFlux1DevTextToImageAspectRatio::LandscapeFourByThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(GenerateFlux1DevTextToImageAspectRatio::LandscapeSixteenByNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(GenerateFlux1DevTextToImageAspectRatio::PortraitThreeByFour) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(GenerateFlux1DevTextToImageAspectRatio::PortraitNineBySixteen) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(GenerateFlux1DevTextToImageNumImages::One) => Some(1),
|
||||
Some(GenerateFlux1DevTextToImageNumImages::Two) => Some(2),
|
||||
Some(GenerateFlux1DevTextToImageNumImages::Three) => Some(3),
|
||||
Some(GenerateFlux1DevTextToImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -198,10 +218,10 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Text),
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
@@ -283,7 +303,7 @@ async fn insert_mock_failure_job(
|
||||
maybe_positive_prompt: prompt,
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Text), // TODO: This endpoint only supports "text" for now
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
+23
-3
@@ -12,6 +12,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_1_schnell_text_to_image_webhook::enqueue_flux_1_schnell_text_to_image_webhook;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_1_schnell_text_to_image_webhook::{Flux1SchnellArgs, Flux1SchnellAspectRatio, Flux1SchnellNumImages};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -167,6 +169,24 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.aspect_ratio {
|
||||
Some(GenerateFlux1SchnellTextToImageAspectRatio::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(GenerateFlux1SchnellTextToImageAspectRatio::SquareHd) => Some(CommonAspectRatio::SquareHd),
|
||||
Some(GenerateFlux1SchnellTextToImageAspectRatio::LandscapeFourByThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(GenerateFlux1SchnellTextToImageAspectRatio::LandscapeSixteenByNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(GenerateFlux1SchnellTextToImageAspectRatio::PortraitThreeByFour) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(GenerateFlux1SchnellTextToImageAspectRatio::PortraitNineBySixteen) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(GenerateFlux1SchnellTextToImageNumImages::One) => Some(1),
|
||||
Some(GenerateFlux1SchnellTextToImageNumImages::Two) => Some(2),
|
||||
Some(GenerateFlux1SchnellTextToImageNumImages::Three) => Some(3),
|
||||
Some(GenerateFlux1SchnellTextToImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -178,10 +198,10 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Text), // TODO: This endpoint only supports "text" for now
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
+22
-3
@@ -15,6 +15,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_pro_11_text_to_image_webhook::FluxPro11Args;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_pro_11_text_to_image_webhook::{enqueue_flux_pro_11_text_to_image_webhook, FluxPro11AspectRatio, FluxPro11NumImages};
|
||||
@@ -153,6 +155,23 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.aspect_ratio {
|
||||
Some(GenerateFluxPro11TextToImageAspectRatio::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(GenerateFluxPro11TextToImageAspectRatio::LandscapeFourByThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(GenerateFluxPro11TextToImageAspectRatio::LandscapeSixteenByNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(GenerateFluxPro11TextToImageAspectRatio::PortraitThreeByFour) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(GenerateFluxPro11TextToImageAspectRatio::PortraitNineBySixteen) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(GenerateFluxPro11TextToImageNumImages::One) => Some(1),
|
||||
Some(GenerateFluxPro11TextToImageNumImages::Two) => Some(2),
|
||||
Some(GenerateFluxPro11TextToImageNumImages::Three) => Some(3),
|
||||
Some(GenerateFluxPro11TextToImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -162,10 +181,10 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Text), // TODO: This endpoint only supports "text" for now
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
+26
-3
@@ -15,6 +15,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_pro_11_ultra_text_to_image_webhook::FluxPro11UltraArgs;
|
||||
use fal_client::requests::webhook::image::text::enqueue_flux_pro_11_ultra_text_to_image_webhook::{enqueue_flux_pro_11_ultra_text_to_image_webhook, FluxPro11UltraAspectRatio, FluxPro11UltraNumImages};
|
||||
@@ -157,6 +159,27 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.aspect_ratio {
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeThreeByTwo) => Some(CommonAspectRatio::WideThreeByTwo),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeFourByThree) => Some(CommonAspectRatio::WideFourByThree),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeSixteenByNine) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeTwentyOneByNine) => Some(CommonAspectRatio::WideTwentyOneByNine),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitTwoByThree) => Some(CommonAspectRatio::TallTwoByThree),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitThreeByFour) => Some(CommonAspectRatio::TallThreeByFour),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineBySixteen) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineByTwentyOne) => Some(CommonAspectRatio::TallNineByTwentyOne),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(GenerateFluxPro11UltraTextToImageNumImages::One) => Some(1),
|
||||
Some(GenerateFluxPro11UltraTextToImageNumImages::Two) => Some(2),
|
||||
Some(GenerateFluxPro11UltraTextToImageNumImages::Three) => Some(3),
|
||||
Some(GenerateFluxPro11UltraTextToImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -166,10 +189,10 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Text), // TODO: This endpoint only supports "text" for now
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
+20
-3
@@ -17,6 +17,8 @@ use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::payments_namespace::PaymentsNamespace;
|
||||
use enums::common::stripe_subscription_status::StripeSubscriptionStatus;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::image::text::enqueue_gpt_image_1_text_to_image_webhook::{enqueue_gpt_image_1_text_to_image_webhook, GptTextToImageByokArgs, GptTextToImageNumImages, GptTextToImageQuality, GptTextToImageSize};
|
||||
@@ -199,6 +201,21 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
|
||||
})?;
|
||||
|
||||
// NB: Don't fail the job if the query fails.
|
||||
let maybe_aspect_ratio = match request.image_size {
|
||||
Some(GenerateGptImage1TextToImageImageSize::Square) => Some(CommonAspectRatio::Square),
|
||||
Some(GenerateGptImage1TextToImageImageSize::Horizontal) => Some(CommonAspectRatio::WideSixteenByNine),
|
||||
Some(GenerateGptImage1TextToImageImageSize::Vertical) => Some(CommonAspectRatio::TallNineBySixteen),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let maybe_batch_count: Option<u8> = match request.num_images {
|
||||
Some(GenerateGptImage1TextToImageNumImages::One) => Some(1),
|
||||
Some(GenerateGptImage1TextToImageNumImages::Two) => Some(2),
|
||||
Some(GenerateGptImage1TextToImageNumImages::Three) => Some(3),
|
||||
Some(GenerateGptImage1TextToImageNumImages::Four) => Some(4),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
@@ -208,10 +225,10 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Text), // TODO: This endpoint only supports "text" for now
|
||||
maybe_aspect_ratio,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
pub mod generate_flux_1_dev_text_to_image_handler;
|
||||
pub mod generate_flux_1_schnell_text_to_image_handler;
|
||||
pub mod generate_flux_pro_11_text_to_image_handler;
|
||||
pub mod generate_flux_pro_11_ultra_text_to_image_handler;
|
||||
pub mod generate_gpt_image_1_text_to_image_handler;
|
||||
+72
-2
@@ -10,6 +10,11 @@ use actix_web::{web, HttpRequest};
|
||||
use artcraft_api_defs::generate::object::generate_hunyuan_2_0_image_to_3d::GenerateHunyuan20ImageTo3dRequest;
|
||||
use artcraft_api_defs::generate::object::generate_hunyuan_2_0_image_to_3d::GenerateHunyuan20ImageTo3dResponse;
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::visibility::Visibility;
|
||||
use fal_client::requests::webhook::object::enqueue_hunyuan_3d_2_image_to_3d_webhook::enqueue_hunyuan_3d_2_image_to_3d_webhook;
|
||||
use fal_client::requests::webhook::object::enqueue_hunyuan_3d_2_image_to_3d_webhook::Hunyuan3d2Args;
|
||||
@@ -20,6 +25,9 @@ use mysql_queries::queries::generic_inference::fal::insert_generic_inference_job
|
||||
use mysql_queries::queries::generic_inference::fal::insert_generic_inference_job_for_fal_queue::InsertGenericInferenceForFalArgs;
|
||||
use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_idempotency_token;
|
||||
use mysql_queries::queries::media_files::get::get_media_file::{get_media_file, get_media_file_with_connection};
|
||||
use mysql_queries::queries::prompt_context_items::insert_batch_prompt_context_items::{insert_batch_prompt_context_items, InsertBatchArgs, PromptContextItem};
|
||||
use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPromptArgs};
|
||||
use sqlx::Acquire;
|
||||
use utoipa::ToSchema;
|
||||
|
||||
/// Hunyuan 2.0 Image to 3D
|
||||
@@ -145,17 +153,74 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
|
||||
|
||||
let ip_address = get_request_ip(&http_request);
|
||||
|
||||
let mut transaction = mysql_connection.begin().await.map_err(|err| {
|
||||
error!("Error starting MySQL transaction: {:?}", err);
|
||||
CommonWebError::ServerError
|
||||
})?;
|
||||
|
||||
// Insert prompt record if we have a prompt
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token),
|
||||
maybe_model_type: Some(CommonModelType::Hunyuan3d2_0),
|
||||
maybe_generation_provider: Some(GenerationProvider::Artcraft),
|
||||
maybe_positive_prompt: None,
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
})
|
||||
.await;
|
||||
|
||||
let prompt_token = match prompt_result {
|
||||
Ok(token) => Some(token),
|
||||
Err(err) => {
|
||||
warn!("Error inserting prompt: {:?}", err);
|
||||
None // Don't fail the job if the prompt insertion fails.
|
||||
}
|
||||
};
|
||||
|
||||
// Insert context items for any images used
|
||||
if let Some(token) = prompt_token.as_ref() {
|
||||
let mut context_items = Vec::new();
|
||||
|
||||
context_items.push(PromptContextItem {
|
||||
media_token: media_file.token.clone(),
|
||||
context_semantic_type: PromptContextSemanticType::Imgref,
|
||||
});
|
||||
|
||||
if !context_items.is_empty() {
|
||||
let result = insert_batch_prompt_context_items(InsertBatchArgs {
|
||||
prompt_token: token.clone(),
|
||||
items: context_items,
|
||||
transaction: &mut transaction,
|
||||
}).await;
|
||||
|
||||
if let Err(err) = result {
|
||||
// NB: Fail open.
|
||||
warn!("Error inserting batch prompt context items: {:?}", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let db_result = insert_generic_inference_job_for_fal_queue(InsertGenericInferenceForFalArgs {
|
||||
uuid_idempotency_token: &request.uuid_idempotency_token,
|
||||
maybe_external_third_party_id: &external_job_id,
|
||||
fal_category: FalCategory::ObjectGeneration,
|
||||
maybe_inference_args: None,
|
||||
maybe_prompt_token: None,
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token),
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
creator_ip_address: &ip_address,
|
||||
creator_set_visibility: Visibility::Public,
|
||||
mysql_executor: &mut *mysql_connection,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
}).await;
|
||||
|
||||
@@ -167,6 +232,11 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
|
||||
}
|
||||
};
|
||||
|
||||
let _r = transaction.commit().await.map_err(|err| {
|
||||
error!("Error committing MySQL transaction: {:?}", err);
|
||||
CommonWebError::ServerError
|
||||
})?;
|
||||
|
||||
Ok(Json(GenerateHunyuan20ImageTo3dResponse {
|
||||
success: true,
|
||||
inference_job_token: job_token,
|
||||
|
||||
+71
-2
@@ -15,12 +15,19 @@ use fal_client::requests::webhook::object::enqueue_hunyuan_3d_21_image_to_3d_web
|
||||
use fal_client::requests::webhook::object::enqueue_hunyuan_3d_21_image_to_3d_webhook::Hunyuan3d21Args;
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use log::{error, info, warn};
|
||||
use sqlx::Acquire;
|
||||
use mysql_queries::queries::generic_inference::fal::insert_generic_inference_job_for_fal_queue::insert_generic_inference_job_for_fal_queue;
|
||||
use mysql_queries::queries::generic_inference::fal::insert_generic_inference_job_for_fal_queue::FalCategory;
|
||||
use mysql_queries::queries::generic_inference::fal::insert_generic_inference_job_for_fal_queue::InsertGenericInferenceForFalArgs;
|
||||
use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_idempotency_token;
|
||||
use mysql_queries::queries::media_files::get::get_media_file::{get_media_file, get_media_file_with_connection};
|
||||
use utoipa::ToSchema;
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use mysql_queries::queries::prompt_context_items::insert_batch_prompt_context_items::{insert_batch_prompt_context_items, InsertBatchArgs, PromptContextItem};
|
||||
use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPromptArgs};
|
||||
|
||||
/// Hunyuan 2.1 Image to 3D
|
||||
#[utoipa::path(
|
||||
@@ -145,17 +152,74 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
|
||||
|
||||
let ip_address = get_request_ip(&http_request);
|
||||
|
||||
let mut transaction = mysql_connection.begin().await.map_err(|err| {
|
||||
error!("Error starting MySQL transaction: {:?}", err);
|
||||
CommonWebError::ServerError
|
||||
})?;
|
||||
|
||||
// Insert prompt record if we have a prompt
|
||||
let prompt_result = insert_prompt(InsertPromptArgs {
|
||||
maybe_apriori_prompt_token: None,
|
||||
prompt_type: PromptType::ArtcraftApp,
|
||||
maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token),
|
||||
maybe_model_type: Some(CommonModelType::Hunyuan3d2_1),
|
||||
maybe_generation_provider: Some(GenerationProvider::Artcraft),
|
||||
maybe_positive_prompt: None,
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
})
|
||||
.await;
|
||||
|
||||
let prompt_token = match prompt_result {
|
||||
Ok(token) => Some(token),
|
||||
Err(err) => {
|
||||
warn!("Error inserting prompt: {:?}", err);
|
||||
None // Don't fail the job if the prompt insertion fails.
|
||||
}
|
||||
};
|
||||
|
||||
// Insert context items for any images used
|
||||
if let Some(token) = prompt_token.as_ref() {
|
||||
let mut context_items = Vec::new();
|
||||
|
||||
context_items.push(PromptContextItem {
|
||||
media_token: media_file.token.clone(),
|
||||
context_semantic_type: PromptContextSemanticType::Imgref,
|
||||
});
|
||||
|
||||
if !context_items.is_empty() {
|
||||
let result = insert_batch_prompt_context_items(InsertBatchArgs {
|
||||
prompt_token: token.clone(),
|
||||
items: context_items,
|
||||
transaction: &mut transaction,
|
||||
}).await;
|
||||
|
||||
if let Err(err) = result {
|
||||
// NB: Fail open.
|
||||
warn!("Error inserting batch prompt context items: {:?}", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let db_result = insert_generic_inference_job_for_fal_queue(InsertGenericInferenceForFalArgs {
|
||||
uuid_idempotency_token: &request.uuid_idempotency_token,
|
||||
maybe_external_third_party_id: &external_job_id,
|
||||
fal_category: FalCategory::ObjectGeneration,
|
||||
maybe_inference_args: None,
|
||||
maybe_prompt_token: None,
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token),
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
creator_ip_address: &ip_address,
|
||||
creator_set_visibility: Visibility::Public,
|
||||
mysql_executor: &mut *mysql_connection,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
}).await;
|
||||
|
||||
@@ -167,6 +231,11 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
|
||||
}
|
||||
};
|
||||
|
||||
let _r = transaction.commit().await.map_err(|err| {
|
||||
error!("Error committing MySQL transaction: {:?}", err);
|
||||
CommonWebError::ServerError
|
||||
})?;
|
||||
|
||||
Ok(Json(GenerateHunyuan21ImageTo3dResponse {
|
||||
success: true,
|
||||
inference_job_token: job_token,
|
||||
|
||||
+1
-1
@@ -307,7 +307,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: None, // TODO: Multi-function handlers support multiple modes
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use log::{error, info, warn};
|
||||
use mysql_queries::queries::generic_inference::worldlabs::insert_generic_inference_job_for_worldlabs_queue_with_apriori_job_token::{insert_generic_inference_job_for_worldlabs_queue_with_apriori_job_token, InsertGenericInferenceForWorldlabsWithAprioriJobTokenArgs};
|
||||
@@ -179,7 +180,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Reference),
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use log::{error, info, warn};
|
||||
use mysql_queries::queries::generic_inference::worldlabs::insert_generic_inference_job_for_worldlabs_queue_with_apriori_job_token::{insert_generic_inference_job_for_worldlabs_queue_with_apriori_job_token, InsertGenericInferenceForWorldlabsWithAprioriJobTokenArgs};
|
||||
@@ -179,7 +180,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Reference),
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
|
||||
+8
-2
@@ -33,6 +33,8 @@ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPrompt
|
||||
use sqlx::Acquire;
|
||||
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
|
||||
use utoipa::ToSchema;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
|
||||
/// Kling 1.6 Pro Image to Video
|
||||
#[utoipa::path(
|
||||
@@ -221,8 +223,12 @@ pub async fn generate_kling_1_6_pro_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
GenerateKling16ProAspectRatio::Square => CommonAspectRatio::Square,
|
||||
GenerateKling16ProAspectRatio::WideSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
GenerateKling16ProAspectRatio::TallNineSixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
+8
-2
@@ -30,6 +30,8 @@ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPrompt
|
||||
use sqlx::Acquire;
|
||||
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
|
||||
use utoipa::ToSchema;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
|
||||
/// Kling 2.1 Master Image to Video
|
||||
#[utoipa::path(
|
||||
@@ -208,8 +210,12 @@ pub async fn generate_kling_2_1_master_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
GenerateKling21MasterAspectRatio::Square => CommonAspectRatio::Square,
|
||||
GenerateKling21MasterAspectRatio::WideSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
GenerateKling21MasterAspectRatio::TallNineSixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
+8
-2
@@ -35,6 +35,8 @@ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPrompt
|
||||
use sqlx::Acquire;
|
||||
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
|
||||
use utoipa::ToSchema;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
|
||||
/// Kling 2.1 Pro Image to Video
|
||||
#[utoipa::path(
|
||||
@@ -223,8 +225,12 @@ pub async fn generate_kling_2_1_pro_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
GenerateKling21ProAspectRatio::Square => CommonAspectRatio::Square,
|
||||
GenerateKling21ProAspectRatio::WideSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
GenerateKling21ProAspectRatio::TallNineSixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
+12
-2
@@ -20,6 +20,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_seedance_1_lite_image_to_video_webhook::Seedance1LiteDuration;
|
||||
use fal_client::requests::webhook::video::image::enqueue_seedance_1_lite_image_to_video_webhook::{enqueue_seedance_1_lite_image_to_video_webhook, Seedance1LiteAspectRatio};
|
||||
@@ -238,8 +240,16 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
GenerateSeedance10LiteAspectRatio::Auto => CommonAspectRatio::Auto,
|
||||
GenerateSeedance10LiteAspectRatio::TwentyOneByNine => CommonAspectRatio::WideTwentyOneByNine,
|
||||
GenerateSeedance10LiteAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
GenerateSeedance10LiteAspectRatio::FourByThree => CommonAspectRatio::WideFourByThree,
|
||||
GenerateSeedance10LiteAspectRatio::Square => CommonAspectRatio::Square,
|
||||
GenerateSeedance10LiteAspectRatio::ThreeByFour => CommonAspectRatio::TallThreeByFour,
|
||||
GenerateSeedance10LiteAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
+2
-1
@@ -20,6 +20,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_seedance_1_pro_image_to_video_webhook::enqueue_seedance_1_pro_image_to_video_webhook;
|
||||
use fal_client::requests::webhook::video::image::enqueue_seedance_1_pro_image_to_video_webhook::Seedance1ProDuration;
|
||||
@@ -215,7 +216,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
+9
-2
@@ -20,6 +20,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_veo_2_image_to_video_webhook::enqueue_veo_2_image_to_video_webhook;
|
||||
use fal_client::requests::webhook::video::image::enqueue_veo_2_image_to_video_webhook::Veo2Args;
|
||||
@@ -219,8 +221,13 @@ pub async fn generate_veo_2_image_to_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
GenerateVeo2AspectRatio::Auto => CommonAspectRatio::Auto,
|
||||
GenerateVeo2AspectRatio::AutoPreferPortrait => CommonAspectRatio::Auto,
|
||||
GenerateVeo2AspectRatio::WideSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
GenerateVeo2AspectRatio::TallNineSixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
+3
-2
@@ -17,6 +17,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_veo_3_fast_image_to_video_webhook::{enqueue_veo_3_fast_image_to_video_webhook, Veo3FastArgs, Veo3FastDuration, Veo3FastResolution};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -212,11 +213,11 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: Some(generate_audio),
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
+9
-3
@@ -17,6 +17,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_veo_3_image_to_video_webhook::{enqueue_veo_3_image_to_video_webhook, Veo3Args, Veo3AspectRatio, Veo3Duration, Veo3Resolution};
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
@@ -220,11 +222,15 @@ pub async fn generate_veo_3_image_to_video_handler(
|
||||
maybe_positive_prompt: Some(prompt),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(CommonGenerationMode::Keyframe), // TODO: This endpoint only supports keyframes for now
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
GenerateVeo3AspectRatio::WideSixteenNine => CommonAspectRatio::WideSixteenByNine,
|
||||
GenerateVeo3AspectRatio::TallNineSixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
GenerateVeo3AspectRatio::Square => CommonAspectRatio::Square,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: Some(generate_audio),
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
pub mod generate_kling_1_6_pro_video_handler;
|
||||
pub mod generate_kling_2_1_master_video_handler;
|
||||
pub mod generate_kling_2_1_pro_video_handler;
|
||||
pub mod generate_seedance_1_0_lite_image_to_video_handler;
|
||||
pub mod generate_seedance_1_0_pro_image_to_video_handler;
|
||||
pub mod generate_veo_2_image_to_video_handler;
|
||||
pub mod generate_veo_3_fast_image_to_video_handler;
|
||||
pub mod generate_veo_3_image_to_video_handler;
|
||||
@@ -1,9 +1,2 @@
|
||||
pub mod generate_kling_1_6_pro_video_handler;
|
||||
pub mod generate_kling_2_1_master_video_handler;
|
||||
pub mod generate_kling_2_1_pro_video_handler;
|
||||
pub mod generate_seedance_1_0_lite_image_to_video_handler;
|
||||
pub mod generate_seedance_1_0_pro_image_to_video_handler;
|
||||
pub mod generate_veo_2_image_to_video_handler;
|
||||
pub mod generate_veo_3_fast_image_to_video_handler;
|
||||
pub mod generate_veo_3_image_to_video_handler;
|
||||
pub mod image;
|
||||
pub mod multi_function;
|
||||
+15
-4
@@ -16,8 +16,10 @@ use artcraft_api_defs::generate::video::multi_function::kling_2_5_turbo_multi_fu
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::visibility::Visibility;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
@@ -149,10 +151,13 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(start_frame_url) = maybe_start_frame_image_url {
|
||||
info!("image-to-video case");
|
||||
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Kling2p5TurboProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKlingV2p5TurboProImageToVideoDurationSeconds::Five,
|
||||
Some(Kling2p5TurboProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKlingV2p5TurboProImageToVideoDurationSeconds::Ten,
|
||||
@@ -189,7 +194,9 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
|
||||
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Kling2p5TurboProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKlingV2p5TurboProTextToVideoDurationSeconds::Five,
|
||||
Some(Kling2p5TurboProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKlingV2p5TurboProTextToVideoDurationSeconds::Ten,
|
||||
@@ -261,8 +268,12 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Kling2p5TurboProMultiFunctionVideoGenAspectRatio::Square => CommonAspectRatio::Square,
|
||||
Kling2p5TurboProMultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Kling2p5TurboProMultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
|
||||
+13
-4
@@ -16,8 +16,10 @@ use artcraft_api_defs::generate::video::multi_function::kling_2_6_multi_function
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::visibility::Visibility;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
@@ -147,9 +149,11 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(start_frame_url) = maybe_start_frame_image_url {
|
||||
info!("image-to-video case");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Kling2p6ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKlingV2p6ProImageToVideoDurationSeconds::Five,
|
||||
@@ -187,6 +191,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Kling2p6ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKlingV2p6ProTextToVideoDurationSeconds::Five,
|
||||
@@ -260,11 +265,15 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Kling2p6ProMultiFunctionVideoGenAspectRatio::Square => CommonAspectRatio::Square,
|
||||
Kling2p6ProMultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Kling2p6ProMultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: request.generate_audio,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
|
||||
+68
-59
@@ -16,8 +16,10 @@ use artcraft_api_defs::generate::video::multi_function::kling_3p0_pro_multi_func
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::visibility::Visibility;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
@@ -40,61 +42,6 @@ use tokens::tokens::generic_inference_jobs::InferenceJobToken;
|
||||
use tokens::tokens::media_files::MediaFileToken;
|
||||
use utoipa::ToSchema;
|
||||
|
||||
fn map_duration_i2v(duration: Option<Kling3p0ProMultiFunctionVideoGenDuration>) -> EnqueueKling3p0ProImageToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0ProImageToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0ProImageToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0ProImageToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0ProImageToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0ProImageToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0ProImageToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0ProImageToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0ProImageToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0ProImageToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0ProImageToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0ProImageToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0ProImageToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0ProImageToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0ProImageToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_duration_t2v(duration: Option<Kling3p0ProMultiFunctionVideoGenDuration>) -> EnqueueKling3p0ProTextToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0ProTextToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0ProTextToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0ProTextToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0ProTextToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0ProTextToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0ProTextToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0ProTextToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0ProTextToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0ProTextToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0ProTextToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0ProTextToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0ProTextToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0ProTextToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0ProTextToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_t2v(aspect_ratio: Option<Kling3p0ProMultiFunctionVideoGenAspectRatio>) -> EnqueueKling3p0ProTextToVideoAspectRatio {
|
||||
match aspect_ratio {
|
||||
Some(Kling3p0ProMultiFunctionVideoGenAspectRatio::Square) => EnqueueKling3p0ProTextToVideoAspectRatio::Square,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueKling3p0ProTextToVideoAspectRatio::SixteenByNine,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueKling3p0ProTextToVideoAspectRatio::NineBySixteen,
|
||||
None => EnqueueKling3p0ProTextToVideoAspectRatio::Square,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_i2v(aspect_ratio: Option<Kling3p0ProMultiFunctionVideoGenAspectRatio>) -> Option<EnqueueKling3p0ProImageToVideoAspectRatio> {
|
||||
aspect_ratio.map(|ar| match ar {
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::Square => EnqueueKling3p0ProImageToVideoAspectRatio::Square,
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::SixteenByNine => EnqueueKling3p0ProImageToVideoAspectRatio::SixteenByNine,
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::NineBySixteen => EnqueueKling3p0ProImageToVideoAspectRatio::NineBySixteen,
|
||||
})
|
||||
}
|
||||
|
||||
/// Kling 3.0 Pro Multi-Function (text and image to video)
|
||||
#[utoipa::path(
|
||||
post,
|
||||
@@ -204,9 +151,11 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
|
||||
let generate_audio = request.generate_audio.unwrap_or(true);
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(start_frame_url) = maybe_start_frame_image_url {
|
||||
info!("image-to-video case");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = map_duration_i2v(request.duration);
|
||||
let aspect_ratio = map_aspect_ratio_i2v(request.aspect_ratio);
|
||||
@@ -244,6 +193,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = map_duration_t2v(request.duration);
|
||||
|
||||
@@ -309,11 +259,15 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::Square => CommonAspectRatio::Square,
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: Some(generate_audio),
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
@@ -397,3 +351,58 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
|
||||
inference_job_token: job_token,
|
||||
}))
|
||||
}
|
||||
|
||||
fn map_duration_i2v(duration: Option<Kling3p0ProMultiFunctionVideoGenDuration>) -> EnqueueKling3p0ProImageToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0ProImageToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0ProImageToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0ProImageToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0ProImageToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0ProImageToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0ProImageToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0ProImageToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0ProImageToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0ProImageToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0ProImageToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0ProImageToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0ProImageToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0ProImageToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0ProImageToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_duration_t2v(duration: Option<Kling3p0ProMultiFunctionVideoGenDuration>) -> EnqueueKling3p0ProTextToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0ProTextToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0ProTextToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0ProTextToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0ProTextToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0ProTextToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0ProTextToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0ProTextToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0ProTextToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0ProTextToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0ProTextToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0ProTextToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0ProTextToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0ProTextToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0ProTextToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_t2v(aspect_ratio: Option<Kling3p0ProMultiFunctionVideoGenAspectRatio>) -> EnqueueKling3p0ProTextToVideoAspectRatio {
|
||||
match aspect_ratio {
|
||||
Some(Kling3p0ProMultiFunctionVideoGenAspectRatio::Square) => EnqueueKling3p0ProTextToVideoAspectRatio::Square,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueKling3p0ProTextToVideoAspectRatio::SixteenByNine,
|
||||
Some(Kling3p0ProMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueKling3p0ProTextToVideoAspectRatio::NineBySixteen,
|
||||
None => EnqueueKling3p0ProTextToVideoAspectRatio::Square,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_i2v(aspect_ratio: Option<Kling3p0ProMultiFunctionVideoGenAspectRatio>) -> Option<EnqueueKling3p0ProImageToVideoAspectRatio> {
|
||||
aspect_ratio.map(|ar| match ar {
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::Square => EnqueueKling3p0ProImageToVideoAspectRatio::Square,
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::SixteenByNine => EnqueueKling3p0ProImageToVideoAspectRatio::SixteenByNine,
|
||||
Kling3p0ProMultiFunctionVideoGenAspectRatio::NineBySixteen => EnqueueKling3p0ProImageToVideoAspectRatio::NineBySixteen,
|
||||
})
|
||||
}
|
||||
|
||||
+68
-59
@@ -16,8 +16,10 @@ use artcraft_api_defs::generate::video::multi_function::kling_3p0_standard_multi
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::visibility::Visibility;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
@@ -40,61 +42,6 @@ use tokens::tokens::generic_inference_jobs::InferenceJobToken;
|
||||
use tokens::tokens::media_files::MediaFileToken;
|
||||
use utoipa::ToSchema;
|
||||
|
||||
fn map_duration_i2v(duration: Option<Kling3p0StandardMultiFunctionVideoGenDuration>) -> EnqueueKling3p0StandardImageToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0StandardImageToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0StandardImageToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0StandardImageToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0StandardImageToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0StandardImageToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0StandardImageToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_duration_t2v(duration: Option<Kling3p0StandardMultiFunctionVideoGenDuration>) -> EnqueueKling3p0StandardTextToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0StandardTextToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0StandardTextToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0StandardTextToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0StandardTextToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0StandardTextToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0StandardTextToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_t2v(aspect_ratio: Option<Kling3p0StandardMultiFunctionVideoGenAspectRatio>) -> EnqueueKling3p0StandardTextToVideoAspectRatio {
|
||||
match aspect_ratio {
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenAspectRatio::Square) => EnqueueKling3p0StandardTextToVideoAspectRatio::Square,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueKling3p0StandardTextToVideoAspectRatio::SixteenByNine,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueKling3p0StandardTextToVideoAspectRatio::NineBySixteen,
|
||||
None => EnqueueKling3p0StandardTextToVideoAspectRatio::Square,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_i2v(aspect_ratio: Option<Kling3p0StandardMultiFunctionVideoGenAspectRatio>) -> Option<EnqueueKling3p0StandardImageToVideoAspectRatio> {
|
||||
aspect_ratio.map(|ar| match ar {
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::Square => EnqueueKling3p0StandardImageToVideoAspectRatio::Square,
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::SixteenByNine => EnqueueKling3p0StandardImageToVideoAspectRatio::SixteenByNine,
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::NineBySixteen => EnqueueKling3p0StandardImageToVideoAspectRatio::NineBySixteen,
|
||||
})
|
||||
}
|
||||
|
||||
/// Kling 3.0 Standard Multi-Function (text and image to video)
|
||||
#[utoipa::path(
|
||||
post,
|
||||
@@ -204,9 +151,11 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
|
||||
let generate_audio = request.generate_audio.unwrap_or(true);
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(start_frame_url) = maybe_start_frame_image_url {
|
||||
info!("image-to-video case");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = map_duration_i2v(request.duration);
|
||||
let aspect_ratio = map_aspect_ratio_i2v(request.aspect_ratio);
|
||||
@@ -244,6 +193,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = map_duration_t2v(request.duration);
|
||||
|
||||
@@ -309,11 +259,15 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::Square => CommonAspectRatio::Square,
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: Some(generate_audio),
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
@@ -397,3 +351,58 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
|
||||
inference_job_token: job_token,
|
||||
}))
|
||||
}
|
||||
|
||||
fn map_duration_i2v(duration: Option<Kling3p0StandardMultiFunctionVideoGenDuration>) -> EnqueueKling3p0StandardImageToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0StandardImageToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0StandardImageToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0StandardImageToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0StandardImageToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0StandardImageToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0StandardImageToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0StandardImageToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_duration_t2v(duration: Option<Kling3p0StandardMultiFunctionVideoGenDuration>) -> EnqueueKling3p0StandardTextToVideoDuration {
|
||||
match duration {
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThreeSeconds) => EnqueueKling3p0StandardTextToVideoDuration::ThreeSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FourSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FiveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SixSeconds) => EnqueueKling3p0StandardTextToVideoDuration::SixSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::SevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::EightSeconds) => EnqueueKling3p0StandardTextToVideoDuration::EightSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::NineSeconds) => EnqueueKling3p0StandardTextToVideoDuration::NineSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::TenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::ElevenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueKling3p0StandardTextToVideoDuration::TwelveSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::ThirteenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::ThirteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FourteenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FourteenSeconds,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenDuration::FifteenSeconds) => EnqueueKling3p0StandardTextToVideoDuration::FifteenSeconds,
|
||||
None => EnqueueKling3p0StandardTextToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_t2v(aspect_ratio: Option<Kling3p0StandardMultiFunctionVideoGenAspectRatio>) -> EnqueueKling3p0StandardTextToVideoAspectRatio {
|
||||
match aspect_ratio {
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenAspectRatio::Square) => EnqueueKling3p0StandardTextToVideoAspectRatio::Square,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueKling3p0StandardTextToVideoAspectRatio::SixteenByNine,
|
||||
Some(Kling3p0StandardMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueKling3p0StandardTextToVideoAspectRatio::NineBySixteen,
|
||||
None => EnqueueKling3p0StandardTextToVideoAspectRatio::Square,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_i2v(aspect_ratio: Option<Kling3p0StandardMultiFunctionVideoGenAspectRatio>) -> Option<EnqueueKling3p0StandardImageToVideoAspectRatio> {
|
||||
aspect_ratio.map(|ar| match ar {
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::Square => EnqueueKling3p0StandardImageToVideoAspectRatio::Square,
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::SixteenByNine => EnqueueKling3p0StandardImageToVideoAspectRatio::SixteenByNine,
|
||||
Kling3p0StandardMultiFunctionVideoGenAspectRatio::NineBySixteen => EnqueueKling3p0StandardImageToVideoAspectRatio::NineBySixteen,
|
||||
})
|
||||
}
|
||||
|
||||
+91
-77
@@ -12,8 +12,10 @@ use actix_web::{web, HttpRequest};
|
||||
use artcraft_api_defs::generate::video::multi_function::seedance_1p5_pro_multi_function_video_gen::{Seedance1p5ProMultiFunctionVideoGenAspectRatio, Seedance1p5ProMultiFunctionVideoGenDuration, Seedance1p5ProMultiFunctionVideoGenRequest, Seedance1p5ProMultiFunctionVideoGenResolution, Seedance1p5ProMultiFunctionVideoGenResponse};
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::visibility::Visibility;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_seedance_1p5_pro_image_to_video_webhook::{enqueue_seedance_1p5_pro_image_to_video_webhook, EnqueueSeedance1p5ProImageToVideoArgs, EnqueueSeedance1p5ProImageToVideoAspectRatio, EnqueueSeedance1p5ProImageToVideoDuration, EnqueueSeedance1p5ProImageToVideoResolution};
|
||||
@@ -28,79 +30,6 @@ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPrompt
|
||||
use sqlx::Acquire;
|
||||
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
|
||||
|
||||
fn map_duration_i2v(d: Option<Seedance1p5ProMultiFunctionVideoGenDuration>) -> EnqueueSeedance1p5ProImageToVideoDuration {
|
||||
match d {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::FourSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::FiveSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::SixSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::SevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::EightSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::NineSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::TenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::ElevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::TwelveSeconds,
|
||||
None => EnqueueSeedance1p5ProImageToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_duration_t2v(d: Option<Seedance1p5ProMultiFunctionVideoGenDuration>) -> EnqueueSeedance1p5ProTextToVideoDuration {
|
||||
match d {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::FourSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::FiveSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::SixSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::SevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::EightSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::NineSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::TenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::ElevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::TwelveSeconds,
|
||||
None => EnqueueSeedance1p5ProTextToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_i2v(ar: Option<Seedance1p5ProMultiFunctionVideoGenAspectRatio>) -> EnqueueSeedance1p5ProImageToVideoAspectRatio {
|
||||
match ar {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::TwentyOneByNine) => EnqueueSeedance1p5ProImageToVideoAspectRatio::TwentyOneByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueSeedance1p5ProImageToVideoAspectRatio::SixteenByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::FourByThree) => EnqueueSeedance1p5ProImageToVideoAspectRatio::FourByThree,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Square) => EnqueueSeedance1p5ProImageToVideoAspectRatio::Square,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::ThreeByFour) => EnqueueSeedance1p5ProImageToVideoAspectRatio::ThreeByFour,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueSeedance1p5ProImageToVideoAspectRatio::NineBySixteen,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Auto) => EnqueueSeedance1p5ProImageToVideoAspectRatio::Auto,
|
||||
None => EnqueueSeedance1p5ProImageToVideoAspectRatio::SixteenByNine,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_t2v(ar: Option<Seedance1p5ProMultiFunctionVideoGenAspectRatio>) -> EnqueueSeedance1p5ProTextToVideoAspectRatio {
|
||||
match ar {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::TwentyOneByNine) => EnqueueSeedance1p5ProTextToVideoAspectRatio::TwentyOneByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueSeedance1p5ProTextToVideoAspectRatio::SixteenByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::FourByThree) => EnqueueSeedance1p5ProTextToVideoAspectRatio::FourByThree,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Square) => EnqueueSeedance1p5ProTextToVideoAspectRatio::Square,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::ThreeByFour) => EnqueueSeedance1p5ProTextToVideoAspectRatio::ThreeByFour,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueSeedance1p5ProTextToVideoAspectRatio::NineBySixteen,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Auto) => EnqueueSeedance1p5ProTextToVideoAspectRatio::SixteenByNine,
|
||||
None => EnqueueSeedance1p5ProTextToVideoAspectRatio::SixteenByNine,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_resolution_i2v(r: Option<Seedance1p5ProMultiFunctionVideoGenResolution>) -> EnqueueSeedance1p5ProImageToVideoResolution {
|
||||
match r {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::FourEightyP) => EnqueueSeedance1p5ProImageToVideoResolution::FourEightyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::SevenTwentyP) => EnqueueSeedance1p5ProImageToVideoResolution::SevenTwentyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::TenEightyP) => EnqueueSeedance1p5ProImageToVideoResolution::TenEightyP,
|
||||
None => EnqueueSeedance1p5ProImageToVideoResolution::SevenTwentyP,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_resolution_t2v(r: Option<Seedance1p5ProMultiFunctionVideoGenResolution>) -> EnqueueSeedance1p5ProTextToVideoResolution {
|
||||
match r {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::FourEightyP) => EnqueueSeedance1p5ProTextToVideoResolution::FourEightyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::SevenTwentyP) => EnqueueSeedance1p5ProTextToVideoResolution::SevenTwentyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::TenEightyP) => EnqueueSeedance1p5ProTextToVideoResolution::TenEightyP,
|
||||
None => EnqueueSeedance1p5ProTextToVideoResolution::SevenTwentyP,
|
||||
}
|
||||
}
|
||||
|
||||
/// Seedance 1.5 Pro Multi-Function (text and image to video)
|
||||
#[utoipa::path(
|
||||
@@ -210,9 +139,11 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
|
||||
let generate_audio = request.generate_audio.unwrap_or(true);
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(image_url) = maybe_image_url {
|
||||
info!("image-to-video case");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = map_duration_i2v(request.duration);
|
||||
let aspect_ratio = map_aspect_ratio_i2v(request.aspect_ratio);
|
||||
@@ -250,6 +181,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = map_duration_t2v(request.duration);
|
||||
let aspect_ratio = map_aspect_ratio_t2v(request.aspect_ratio);
|
||||
@@ -314,11 +246,19 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Seedance1p5ProMultiFunctionVideoGenAspectRatio::Auto => CommonAspectRatio::Auto,
|
||||
Seedance1p5ProMultiFunctionVideoGenAspectRatio::TwentyOneByNine => CommonAspectRatio::WideTwentyOneByNine,
|
||||
Seedance1p5ProMultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Seedance1p5ProMultiFunctionVideoGenAspectRatio::FourByThree => CommonAspectRatio::WideFourByThree,
|
||||
Seedance1p5ProMultiFunctionVideoGenAspectRatio::Square => CommonAspectRatio::Square,
|
||||
Seedance1p5ProMultiFunctionVideoGenAspectRatio::ThreeByFour => CommonAspectRatio::TallThreeByFour,
|
||||
Seedance1p5ProMultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: Some(generate_audio),
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
@@ -402,3 +342,77 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
|
||||
inference_job_token: job_token,
|
||||
}))
|
||||
}
|
||||
|
||||
fn map_duration_i2v(d: Option<Seedance1p5ProMultiFunctionVideoGenDuration>) -> EnqueueSeedance1p5ProImageToVideoDuration {
|
||||
match d {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::FourSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::FiveSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::SixSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::SevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::EightSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::NineSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::TenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::ElevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueSeedance1p5ProImageToVideoDuration::TwelveSeconds,
|
||||
None => EnqueueSeedance1p5ProImageToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_duration_t2v(d: Option<Seedance1p5ProMultiFunctionVideoGenDuration>) -> EnqueueSeedance1p5ProTextToVideoDuration {
|
||||
match d {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::FourSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::FiveSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::FiveSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SixSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::SixSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::SevenSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::SevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::EightSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::EightSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::NineSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::NineSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TenSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::TenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::ElevenSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::ElevenSeconds,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenDuration::TwelveSeconds) => EnqueueSeedance1p5ProTextToVideoDuration::TwelveSeconds,
|
||||
None => EnqueueSeedance1p5ProTextToVideoDuration::FiveSeconds,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_i2v(ar: Option<Seedance1p5ProMultiFunctionVideoGenAspectRatio>) -> EnqueueSeedance1p5ProImageToVideoAspectRatio {
|
||||
match ar {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::TwentyOneByNine) => EnqueueSeedance1p5ProImageToVideoAspectRatio::TwentyOneByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueSeedance1p5ProImageToVideoAspectRatio::SixteenByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::FourByThree) => EnqueueSeedance1p5ProImageToVideoAspectRatio::FourByThree,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Square) => EnqueueSeedance1p5ProImageToVideoAspectRatio::Square,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::ThreeByFour) => EnqueueSeedance1p5ProImageToVideoAspectRatio::ThreeByFour,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueSeedance1p5ProImageToVideoAspectRatio::NineBySixteen,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Auto) => EnqueueSeedance1p5ProImageToVideoAspectRatio::Auto,
|
||||
None => EnqueueSeedance1p5ProImageToVideoAspectRatio::SixteenByNine,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_aspect_ratio_t2v(ar: Option<Seedance1p5ProMultiFunctionVideoGenAspectRatio>) -> EnqueueSeedance1p5ProTextToVideoAspectRatio {
|
||||
match ar {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::TwentyOneByNine) => EnqueueSeedance1p5ProTextToVideoAspectRatio::TwentyOneByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::SixteenByNine) => EnqueueSeedance1p5ProTextToVideoAspectRatio::SixteenByNine,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::FourByThree) => EnqueueSeedance1p5ProTextToVideoAspectRatio::FourByThree,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Square) => EnqueueSeedance1p5ProTextToVideoAspectRatio::Square,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::ThreeByFour) => EnqueueSeedance1p5ProTextToVideoAspectRatio::ThreeByFour,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::NineBySixteen) => EnqueueSeedance1p5ProTextToVideoAspectRatio::NineBySixteen,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenAspectRatio::Auto) => EnqueueSeedance1p5ProTextToVideoAspectRatio::SixteenByNine,
|
||||
None => EnqueueSeedance1p5ProTextToVideoAspectRatio::SixteenByNine,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_resolution_i2v(r: Option<Seedance1p5ProMultiFunctionVideoGenResolution>) -> EnqueueSeedance1p5ProImageToVideoResolution {
|
||||
match r {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::FourEightyP) => EnqueueSeedance1p5ProImageToVideoResolution::FourEightyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::SevenTwentyP) => EnqueueSeedance1p5ProImageToVideoResolution::SevenTwentyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::TenEightyP) => EnqueueSeedance1p5ProImageToVideoResolution::TenEightyP,
|
||||
None => EnqueueSeedance1p5ProImageToVideoResolution::SevenTwentyP,
|
||||
}
|
||||
}
|
||||
|
||||
fn map_resolution_t2v(r: Option<Seedance1p5ProMultiFunctionVideoGenResolution>) -> EnqueueSeedance1p5ProTextToVideoResolution {
|
||||
match r {
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::FourEightyP) => EnqueueSeedance1p5ProTextToVideoResolution::FourEightyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::SevenTwentyP) => EnqueueSeedance1p5ProTextToVideoResolution::SevenTwentyP,
|
||||
Some(Seedance1p5ProMultiFunctionVideoGenResolution::TenEightyP) => EnqueueSeedance1p5ProTextToVideoResolution::TenEightyP,
|
||||
None => EnqueueSeedance1p5ProTextToVideoResolution::SevenTwentyP,
|
||||
}
|
||||
}
|
||||
|
||||
+30
-3
@@ -20,6 +20,8 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use log::{error, info, warn};
|
||||
use mysql_queries::queries::generic_inference::seedance2pro::insert_generic_inference_job_for_seedance2pro_queue_with_apriori_job_token::{
|
||||
@@ -179,6 +181,21 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
|
||||
"Reference audio",
|
||||
).await?;
|
||||
|
||||
let is_keyframe = request.start_frame_media_token.is_some()
|
||||
|| request.end_frame_media_token.is_some();
|
||||
|
||||
let is_reference = request.reference_image_media_tokens.is_some()
|
||||
|| request.reference_video_media_tokens.is_some()
|
||||
|| request.reference_audio_media_tokens.is_some();
|
||||
|
||||
let generation_mode = if is_keyframe {
|
||||
CommonGenerationMode::Keyframe
|
||||
} else if is_reference {
|
||||
CommonGenerationMode::Reference
|
||||
} else {
|
||||
CommonGenerationMode::Text
|
||||
};
|
||||
|
||||
// --- Map request params to seedance2pro types ---
|
||||
|
||||
let resolution = match request.aspect_ratio {
|
||||
@@ -273,10 +290,20 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Seedance2p0AspectRatio::Landscape16x9 => CommonAspectRatio::WideSixteenByNine,
|
||||
Seedance2p0AspectRatio::Portrait9x16 => CommonAspectRatio::TallNineBySixteen,
|
||||
Seedance2p0AspectRatio::Square1x1 => CommonAspectRatio::Square,
|
||||
Seedance2p0AspectRatio::Standard4x3 => CommonAspectRatio::WideFourByThree,
|
||||
Seedance2p0AspectRatio::Portrait3x4 => CommonAspectRatio::TallThreeByFour,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_batch_count: request.batch_count.map(|bc| match bc {
|
||||
Seedance2p0BatchCount::One => 1,
|
||||
Seedance2p0BatchCount::Two => 2,
|
||||
Seedance2p0BatchCount::Four => 4,
|
||||
}),
|
||||
maybe_generate_audio: None,
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
|
||||
+11
-2
@@ -17,8 +17,10 @@ use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path:
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_sora_2_image_to_video_webhook::{enqueue_sora_2_image_to_video_webhook, EnqueueSora2ImageToVideoArgs, EnqueueSora2ImageToVideoAspectRatio, EnqueueSora2ImageToVideoDurationSeconds, EnqueueSora2ImageToVideoResolution};
|
||||
@@ -147,9 +149,11 @@ pub async fn sora_2_multi_function_video_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(image_url) = maybe_image_url {
|
||||
info!("image-to-video case");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Sora2MultiFunctionVideoGenDuration::FourSeconds) => EnqueueSora2ImageToVideoDurationSeconds::Four,
|
||||
@@ -201,6 +205,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Sora2MultiFunctionVideoGenDuration::FourSeconds) => EnqueueSora2TextToVideoDurationSeconds::Four,
|
||||
@@ -280,8 +285,12 @@ pub async fn sora_2_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Sora2MultiFunctionVideoGenAspectRatio::Auto => CommonAspectRatio::Auto,
|
||||
Sora2MultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Sora2MultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
|
||||
+11
-2
@@ -17,8 +17,10 @@ use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path:
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_sora_2_pro_image_to_video_webhook::{enqueue_sora_2_pro_image_to_video_webhook, EnqueueSora2ProImageToVideoArgs, EnqueueSora2ProImageToVideoAspectRatio, EnqueueSora2ProImageToVideoDurationSeconds, EnqueueSora2ProImageToVideoResolution};
|
||||
@@ -147,9 +149,11 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
if let Some(image_url) = maybe_image_url {
|
||||
info!("image-to-video case");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Sora2ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueSora2ProImageToVideoDurationSeconds::Four,
|
||||
@@ -202,6 +206,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Sora2ProMultiFunctionVideoGenDuration::FourSeconds) => EnqueueSora2ProTextToVideoDurationSeconds::Four,
|
||||
@@ -282,8 +287,12 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Sora2ProMultiFunctionVideoGenAspectRatio::Auto => CommonAspectRatio::Auto,
|
||||
Sora2ProMultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Sora2ProMultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
|
||||
+13
-3
@@ -17,8 +17,10 @@ use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path:
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_veo_3p1_fast_first_last_frame_image_to_video_webhook::{enqueue_veo_3p1_fast_first_last_frame_image_to_video_webhook, EnqueueVeo3p1FastFirstLastFrameImageToVideoArgs, EnqueueVeo3p1FastFirstLastFrameImageToVideoAspectRatio, EnqueueVeo3p1FastFirstLastFrameImageToVideoDurationSeconds, EnqueueVeo3p1FastFirstLastFrameImageToVideoResolution};
|
||||
@@ -148,6 +150,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
let generate_audio = request.generate_audio.unwrap_or(true);
|
||||
|
||||
@@ -155,6 +158,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
|
||||
if let Some(end_frame_url) = maybe_end_frame_image_url {
|
||||
|
||||
info!("image-to-video case (start and end frame)");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Veo3p1FastMultiFunctionVideoGenDuration::FourSeconds) => EnqueueVeo3p1FastFirstLastFrameImageToVideoDurationSeconds::Four,
|
||||
@@ -208,6 +212,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("image-to-video case (start frame only)");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Veo3p1FastMultiFunctionVideoGenDuration::FourSeconds) => EnqueueVeo3p1FastImageToVideoDurationSeconds::Four,
|
||||
@@ -261,6 +266,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Veo3p1FastMultiFunctionVideoGenDuration::FourSeconds) => EnqueueVeo3p1FastTextToVideoDurationSeconds::Four,
|
||||
@@ -345,11 +351,15 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Veo3p1FastMultiFunctionVideoGenAspectRatio::Auto => CommonAspectRatio::Auto,
|
||||
Veo3p1FastMultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Veo3p1FastMultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: Some(generate_audio),
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
|
||||
+13
-3
@@ -17,8 +17,10 @@ use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path:
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use fal_client::creds::open_ai_api_key::OpenAiApiKey;
|
||||
use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator;
|
||||
use fal_client::requests::webhook::video::image::enqueue_veo_3p1_first_last_frame_image_to_video_webhook::{enqueue_veo_3p1_first_last_frame_image_to_video_webhook, EnqueueVeo3p1FirstLastFrameImageToVideoArgs, EnqueueVeo3p1FirstLastFrameImageToVideoAspectRatio, EnqueueVeo3p1FirstLastFrameImageToVideoDurationSeconds, EnqueueVeo3p1FirstLastFrameImageToVideoResolution};
|
||||
@@ -148,6 +150,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
|
||||
let apriori_job_token = InferenceJobToken::generate();
|
||||
|
||||
let fal_result;
|
||||
let generation_mode;
|
||||
|
||||
let generate_audio = request.generate_audio.unwrap_or(true);
|
||||
|
||||
@@ -155,6 +158,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
|
||||
if let Some(end_frame_url) = maybe_end_frame_image_url {
|
||||
|
||||
info!("image-to-video case (start and end frame)");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Veo3p1MultiFunctionVideoGenDuration::FourSeconds) => EnqueueVeo3p1FirstLastFrameImageToVideoDurationSeconds::Four,
|
||||
@@ -208,6 +212,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("image-to-video case (start frame only)");
|
||||
generation_mode = CommonGenerationMode::Keyframe;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Veo3p1MultiFunctionVideoGenDuration::FourSeconds) => EnqueueVeo3p1ImageToVideoDurationSeconds::Four,
|
||||
@@ -261,6 +266,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
|
||||
|
||||
} else {
|
||||
info!("text-to-video case");
|
||||
generation_mode = CommonGenerationMode::Text;
|
||||
|
||||
let duration = match request.duration {
|
||||
Some(Veo3p1MultiFunctionVideoGenDuration::FourSeconds) => EnqueueVeo3p1TextToVideoDurationSeconds::Four,
|
||||
@@ -345,11 +351,15 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
|
||||
maybe_positive_prompt: request.prompt.as_deref(),
|
||||
maybe_negative_prompt: None,
|
||||
maybe_other_args: None,
|
||||
maybe_generation_mode: None,
|
||||
maybe_aspect_ratio: None,
|
||||
maybe_generation_mode: Some(generation_mode),
|
||||
maybe_aspect_ratio: request.aspect_ratio.as_ref().map(|ar| match ar {
|
||||
Veo3p1MultiFunctionVideoGenAspectRatio::Auto => CommonAspectRatio::Auto,
|
||||
Veo3p1MultiFunctionVideoGenAspectRatio::SixteenByNine => CommonAspectRatio::WideSixteenByNine,
|
||||
Veo3p1MultiFunctionVideoGenAspectRatio::NineBySixteen => CommonAspectRatio::TallNineBySixteen,
|
||||
}),
|
||||
maybe_resolution: None,
|
||||
maybe_batch_count: None,
|
||||
maybe_generate_audio: None,
|
||||
maybe_generate_audio: Some(generate_audio),
|
||||
creator_ip_address: &ip_address,
|
||||
mysql_executor: &mut *transaction,
|
||||
phantom: Default::default(),
|
||||
|
||||
+14
-14
@@ -6,11 +6,11 @@ use crate::http_server::endpoints::generate::image::edit::gemini_25_flash_edit_i
|
||||
use crate::http_server::endpoints::generate::image::edit::gpt_image_1_edit_image_handler::gpt_image_1_edit_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::edit::qwen_edit_image_handler::qwen_edit_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::edit::seededit_3_edit_image_handler::seededit_3_edit_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::generate_flux_1_dev_text_to_image_handler::generate_flux_1_dev_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::generate_flux_1_schnell_text_to_image_handler::generate_flux_1_schnell_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::generate_flux_pro_11_text_to_image_handler::generate_flux_pro_11_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image_handler::generate_flux_pro_11_ultra_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::generate_gpt_image_1_text_to_image_handler::generate_gpt_image_1_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::text::generate_flux_1_dev_text_to_image_handler::generate_flux_1_dev_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::text::generate_flux_1_schnell_text_to_image_handler::generate_flux_1_schnell_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::text::generate_flux_pro_11_text_to_image_handler::generate_flux_pro_11_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::text::generate_flux_pro_11_ultra_text_to_image_handler::generate_flux_pro_11_ultra_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::text::generate_gpt_image_1_text_to_image_handler::generate_gpt_image_1_text_to_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::inpaint::flux_dev_juggernaut_inpaint_handler::flux_dev_juggernaut_inpaint_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::inpaint::flux_pro_1_inpaint_handler::flux_pro_1_inpaint_image_handler;
|
||||
use crate::http_server::endpoints::generate::image::multi_function::bytedance_seedream_v4_multi_function_image_gen_handler::bytedance_seedream_v4_multi_function_image_gen_handler;
|
||||
@@ -22,20 +22,20 @@ use crate::http_server::endpoints::generate::image::multi_function::nano_banana_
|
||||
use crate::http_server::endpoints::generate::image::multi_function::nano_banana_pro_multi_function_image_gen_handler::nano_banana_pro_multi_function_image_gen_handler;
|
||||
use crate::http_server::endpoints::generate::image::angle::flux_2_lora_edit_image_angle_handler::flux_2_lora_edit_image_angle_handler;
|
||||
use crate::http_server::endpoints::generate::image::angle::qwen_edit_2511_edit_image_angle_handler::qwen_edit_2511_edit_image_angle_handler;
|
||||
use crate::http_server::endpoints::generate::image::remove_image_background_handler::remove_image_background_handler;
|
||||
use crate::http_server::endpoints::generate::image::bg_removal::remove_image_background_handler::remove_image_background_handler;
|
||||
use crate::http_server::endpoints::generate::object::generate_hunyuan_2_0_image_to_3d_handler::generate_hunyuan_2_0_image_to_3d_handler;
|
||||
use crate::http_server::endpoints::generate::splat::generate_worldlabs_marble_0p1_mini_splat_handler::generate_worldlabs_marble_0p1_mini_splat_handler;
|
||||
use crate::http_server::endpoints::generate::splat::generate_worldlabs_marble_0p1_plus_splat_handler::generate_worldlabs_marble_0p1_plus_splat_handler;
|
||||
use crate::http_server::endpoints::generate::object::generate_hunyuan_2_1_image_to_3d_handler::generate_hunyuan_2_1_image_to_3d_handler;
|
||||
use crate::http_server::endpoints::generate::object::multi_function::generate_hunyuan3d_v3_multi_function_object_handler::generate_hunyuan3d_v3_multi_function_object_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_kling_1_6_pro_video_handler::generate_kling_1_6_pro_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_kling_2_1_master_video_handler::generate_kling_2_1_master_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_kling_2_1_pro_video_handler::generate_kling_2_1_pro_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_seedance_1_0_lite_image_to_video_handler::generate_seedance_1_0_lite_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_seedance_1_0_pro_image_to_video_handler::generate_seedance_1_0_pro_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_veo_2_image_to_video_handler::generate_veo_2_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_veo_3_fast_image_to_video_handler::generate_veo_3_fast_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::generate_veo_3_image_to_video_handler::generate_veo_3_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_kling_1_6_pro_video_handler::generate_kling_1_6_pro_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_kling_2_1_master_video_handler::generate_kling_2_1_master_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_kling_2_1_pro_video_handler::generate_kling_2_1_pro_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_seedance_1_0_lite_image_to_video_handler::generate_seedance_1_0_lite_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_seedance_1_0_pro_image_to_video_handler::generate_seedance_1_0_pro_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_veo_2_image_to_video_handler::generate_veo_2_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_veo_3_fast_image_to_video_handler::generate_veo_3_fast_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::image::generate_veo_3_image_to_video_handler::generate_veo_3_image_to_video_handler;
|
||||
use crate::http_server::endpoints::generate::video::multi_function::kling_2p5_turbo_pro_multi_function_video_gen_handler::kling_2p5_turbo_pro_multi_function_video_gen_handler;
|
||||
use crate::http_server::endpoints::generate::video::multi_function::kling_2p6_pro_multi_function_video_gen_handler::kling_2p6_pro_multi_function_video_gen_handler;
|
||||
use crate::http_server::endpoints::generate::video::multi_function::kling_3p0_pro_multi_function_video_gen_handler::kling_3p0_pro_multi_function_video_gen_handler;
|
||||
|
||||
Reference in New Issue
Block a user