From eeb4d567ac9c0930d27cf90f9590f40dbbdfbf55 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 16 Jun 2025 14:00:45 -0400 Subject: [PATCH] add aspect and num images --- ...flux_pro_11_ultra_text_to_image_webhook.rs | 41 +++++++++++++++++-- ...lux_pro_11_ultra_text_to_image_handler.rs} | 4 +- .../endpoints/generate/image/mod.rs | 2 +- .../http_server/routes/add_generate_routes.rs | 2 +- 4 files changed, 43 insertions(+), 6 deletions(-) rename crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/{generate_flux_pro_ultra_text_to_image_handler.rs => generate_flux_pro_11_ultra_text_to_image_handler.rs} (96%) diff --git a/crates/lib/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs b/crates/lib/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs index 51946abe20..d0aaba2f76 100644 --- a/crates/lib/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs +++ b/crates/lib/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs @@ -1,7 +1,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; -use fal::endpoints::fal_ai::flux_pro::v1_1_ultra::{v1_1_ultra, FluxProUltraTextToImageInput}; +use fal::endpoints::fal_ai::flux_pro::v1_1_ultra::{v1_1_ultra, AspectRatioProperty, FluxProUltraTextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; @@ -9,17 +9,52 @@ pub struct FluxPro11UltraArgs<'a, U: IntoUrl> { pub prompt: &'a str, pub webhook_url: U, pub api_key: &'a FalApiKey, + pub aspect_ratio: FluxPro11UltraAspectRatio, + pub num_images: FluxPro11UltraNumImages, +} + +#[derive(Copy, Clone, Debug)] +pub enum FluxPro11UltraAspectRatio { + Square, // 1:1 + LandscapeFourByThree, // 4:3 + LandscapeSixteenByNine, // 16:9 + PortraitThreeByFour, // 3:4 + PortraitNineBySixteen, // 9:16 + //Custom { width: u32, height: u32 }, // TODO +} + +#[derive(Copy, Clone, Debug)] +pub enum FluxPro11UltraNumImages { + One, // Default + Two, + Three, + Four, } pub async fn enqueue_flux_pro_11_ultra_text_to_image_webhook( args: FluxPro11UltraArgs<'_, U> ) -> Result { + let num_images = match args.num_images { + FluxPro11UltraNumImages::One => 1, + FluxPro11UltraNumImages::Two => 2, + FluxPro11UltraNumImages::Three => 3, + FluxPro11UltraNumImages::Four => 4, + }; + + let aspect_ratio = match args.aspect_ratio { + FluxPro11UltraAspectRatio::Square => AspectRatioProperty::Property_1_1, + FluxPro11UltraAspectRatio::LandscapeFourByThree => AspectRatioProperty::Property_4_3, + FluxPro11UltraAspectRatio::LandscapeSixteenByNine => AspectRatioProperty::Property_16_9, + FluxPro11UltraAspectRatio::PortraitThreeByFour => AspectRatioProperty::Property_3_4, + FluxPro11UltraAspectRatio::PortraitNineBySixteen => AspectRatioProperty::Property_9_16, + }; + let request = FluxProUltraTextToImageInput { prompt: args.prompt.to_string(), + num_images: Some(num_images), + aspect_ratio: Some(aspect_ratio), // Maybe expose - num_images: Some(1), // Default is 1 - aspect_ratio: None, // Default is "16:9" seed: None, raw: Some(true), // Generate less processed, more natural-looking images. Default is false. // Maybe abstract diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_ultra_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image_handler.rs similarity index 96% rename from crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_ultra_text_to_image_handler.rs rename to crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image_handler.rs index c951d688ff..dfd625f55b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_ultra_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image_handler.rs @@ -19,8 +19,8 @@ use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageResponse; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums::common::visibility::Visibility; -use fal_client::requests::webhook::image::enqueue_flux_pro_11_ultra_text_to_image_webhook::enqueue_flux_pro_11_ultra_text_to_image_webhook; use fal_client::requests::webhook::image::enqueue_flux_pro_11_ultra_text_to_image_webhook::FluxPro11UltraArgs; +use fal_client::requests::webhook::image::enqueue_flux_pro_11_ultra_text_to_image_webhook::{enqueue_flux_pro_11_ultra_text_to_image_webhook, FluxPro11UltraAspectRatio, FluxPro11UltraNumImages}; use http_server_common::request::get_request_ip::get_request_ip; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; use idempotency::uuid::generate_random_uuid; @@ -129,6 +129,8 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler( prompt: request.prompt.as_deref().unwrap_or(""), webhook_url: &server_state.fal.webhook_url, api_key: &server_state.fal.api_key, + aspect_ratio: FluxPro11UltraAspectRatio::LandscapeSixteenByNine, + num_images: FluxPro11UltraNumImages::One, }; let fal_result = enqueue_flux_pro_11_ultra_text_to_image_webhook(args) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/mod.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/mod.rs index 48b150f9f1..062e41fdc1 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/mod.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/mod.rs @@ -1,2 +1,2 @@ -pub mod generate_flux_pro_ultra_text_to_image_handler; +pub mod generate_flux_pro_11_ultra_text_to_image_handler; pub mod remove_image_background_handler; \ No newline at end of file diff --git a/crates/service/web/storyteller_web/src/http_server/routes/add_generate_routes.rs b/crates/service/web/storyteller_web/src/http_server/routes/add_generate_routes.rs index 4ab6f6bbcc..ac82abf9d4 100644 --- a/crates/service/web/storyteller_web/src/http_server/routes/add_generate_routes.rs +++ b/crates/service/web/storyteller_web/src/http_server/routes/add_generate_routes.rs @@ -1,4 +1,4 @@ -use crate::http_server::endpoints::generate::image::generate_flux_pro_ultra_text_to_image_handler::generate_flux_pro_11_ultra_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::remove_image_background_handler::remove_image_background_handler; use crate::http_server::endpoints::generate::object::generate_hunyuan2_image_to_3d_handler::generate_hunyuan_2_image_to_3d_handler; use crate::http_server::endpoints::generate::video::generate_kling_1_6_pro_video_handler::generate_kling_1_6_pro_video_handler;