diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/bg_removal/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/bg_removal/mod.rs new file mode 100644 index 0000000000..243c3076ef --- /dev/null +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/bg_removal/mod.rs @@ -0,0 +1 @@ +pub mod remove_image_background; diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/remove_image_background.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/bg_removal/remove_image_background.rs similarity index 100% rename from crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/remove_image_background.rs rename to crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/bg_removal/remove_image_background.rs diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/mod.rs index 5cd3af7174..271a82aead 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/mod.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/mod.rs @@ -1,10 +1,5 @@ +pub mod bg_removal; pub mod edit; -pub mod generate_flux_1_dev_text_to_image; -pub mod generate_flux_1_schnell_text_to_image; -pub mod generate_flux_pro_11_text_to_image; -pub mod generate_flux_pro_11_ultra_text_to_image; -pub mod generate_gpt_image_1_text_to_image; pub mod inpaint; pub mod multi_function; -pub mod remove_image_background; pub mod text; \ No newline at end of file diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_1_dev_text_to_image.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_1_dev_text_to_image.rs similarity index 100% rename from crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_1_dev_text_to_image.rs rename to crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_1_dev_text_to_image.rs diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_1_schnell_text_to_image.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_1_schnell_text_to_image.rs similarity index 100% rename from crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_1_schnell_text_to_image.rs rename to crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_1_schnell_text_to_image.rs diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_pro_11_text_to_image.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_pro_11_text_to_image.rs similarity index 93% rename from crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_pro_11_text_to_image.rs rename to crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_pro_11_text_to_image.rs index ed7bd6127b..bc302d3a09 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_pro_11_text_to_image.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_pro_11_text_to_image.rs @@ -19,6 +19,7 @@ pub struct GenerateFluxPro11TextToImageRequest { pub num_images: Option, } +// TODO(btw,2026-01-01): Fal.ai and Fal.rs client libraries seem to disagree about the options. #[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)] #[serde(rename_all = "snake_case")] pub enum GenerateFluxPro11TextToImageAspectRatio { diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_pro_11_ultra_text_to_image.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_pro_11_ultra_text_to_image.rs similarity index 91% rename from crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_pro_11_ultra_text_to_image.rs rename to crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_pro_11_ultra_text_to_image.rs index 91292b7a39..1eec1d82e0 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_flux_pro_11_ultra_text_to_image.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_flux_pro_11_ultra_text_to_image.rs @@ -23,10 +23,14 @@ pub struct GenerateFluxPro11UltraTextToImageRequest { #[serde(rename_all = "snake_case")] pub enum GenerateFluxPro11UltraTextToImageAspectRatio { Square, // 1:1 + LandscapeThreeByTwo, // 3:2 LandscapeFourByThree, // 4:3 LandscapeSixteenByNine, // 16:9 + LandscapeTwentyOneByNine, // 21:9 + PortraitTwoByThree, // 2:3 PortraitThreeByFour, // 3:4 PortraitNineBySixteen, // 9:16 + PortraitNineByTwentyOne, // 9:21 //Custom { width: u32, height: u32 }, // TODO } diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_gpt_image_1_text_to_image.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_gpt_image_1_text_to_image.rs similarity index 100% rename from crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/generate_gpt_image_1_text_to_image.rs rename to crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/generate_gpt_image_1_text_to_image.rs diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/mod.rs index 61f401bc12..c3c7477352 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/mod.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/image/text/mod.rs @@ -1 +1,6 @@ -pub mod gemini_25_flash_text_to_image; \ No newline at end of file +pub mod gemini_25_flash_text_to_image; +pub mod generate_flux_1_dev_text_to_image; +pub mod generate_flux_1_schnell_text_to_image; +pub mod generate_flux_pro_11_text_to_image; +pub mod generate_flux_pro_11_ultra_text_to_image; +pub mod generate_gpt_image_1_text_to_image; diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/bg_removal/mod.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/bg_removal/mod.rs new file mode 100644 index 0000000000..243c3076ef --- /dev/null +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/bg_removal/mod.rs @@ -0,0 +1 @@ +pub mod remove_image_background; diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/remove_image_background.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/bg_removal/remove_image_background.rs similarity index 77% rename from crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/remove_image_background.rs rename to crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/bg_removal/remove_image_background.rs index 95c0d11723..55b561398b 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/remove_image_background.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/bg_removal/remove_image_background.rs @@ -2,7 +2,7 @@ use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::basic_json_post_request::basic_json_post_request; -use artcraft_api_defs::generate::image::remove_image_background::{RemoveImageBackgroundRequest, RemoveImageBackgroundResponse, REMOVE_IMAGE_BACKGROUND_PATH}; +use artcraft_api_defs::generate::image::bg_removal::remove_image_background::{RemoveImageBackgroundRequest, RemoveImageBackgroundResponse, REMOVE_IMAGE_BACKGROUND_PATH}; pub async fn remove_image_background( api_host: &ApiHost, diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs index c236019482..271a82aead 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs @@ -1,9 +1,5 @@ +pub mod bg_removal; pub mod edit; -pub mod generate_flux_1_dev_text_to_image; -pub mod generate_flux_1_schnell_text_to_image; -pub mod generate_flux_pro_11_text_to_image; -pub mod generate_flux_pro_11_ultra_text_to_image; -pub mod generate_gpt_image_1_text_to_image; pub mod inpaint; pub mod multi_function; -pub mod remove_image_background; \ No newline at end of file +pub mod text; \ No newline at end of file diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_1_dev_text_to_image.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_1_dev_text_to_image.rs similarity index 75% rename from crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_1_dev_text_to_image.rs rename to crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_1_dev_text_to_image.rs index 9257f811c9..835786845c 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_1_dev_text_to_image.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_1_dev_text_to_image.rs @@ -2,7 +2,7 @@ use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::basic_json_post_request::basic_json_post_request; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::{GenerateFlux1DevTextToImageRequest, GenerateFlux1DevTextToImageResponse, GENERATE_FLUX_1_DEV_TEXT_TO_IMAGE_PATH}; +use artcraft_api_defs::generate::image::text::generate_flux_1_dev_text_to_image::{GenerateFlux1DevTextToImageRequest, GenerateFlux1DevTextToImageResponse, GENERATE_FLUX_1_DEV_TEXT_TO_IMAGE_PATH}; pub async fn generate_flux_1_dev_text_to_image( diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_1_schnell_text_to_image.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_1_schnell_text_to_image.rs similarity index 74% rename from crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_1_schnell_text_to_image.rs rename to crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_1_schnell_text_to_image.rs index a5f7b5cf15..de30430c94 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_1_schnell_text_to_image.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_1_schnell_text_to_image.rs @@ -2,7 +2,7 @@ use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::basic_json_post_request::basic_json_post_request; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse, GENERATE_FLUX_1_SCHNELL_TEXT_TO_IMAGE_PATH}; +use artcraft_api_defs::generate::image::text::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse, GENERATE_FLUX_1_SCHNELL_TEXT_TO_IMAGE_PATH}; pub async fn generate_flux_1_schnell_text_to_image( diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_pro_11_text_to_image.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_pro_11_text_to_image.rs similarity index 75% rename from crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_pro_11_text_to_image.rs rename to crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_pro_11_text_to_image.rs index 8a5196d442..a3c73d7833 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_pro_11_text_to_image.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_pro_11_text_to_image.rs @@ -2,7 +2,7 @@ use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::basic_json_post_request::basic_json_post_request; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::{GenerateFluxPro11TextToImageRequest, GenerateFluxPro11TextToImageResponse, GENERATE_FLUX_PRO_11_TEXT_TO_IMAGE_PATH}; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::{GenerateFluxPro11TextToImageRequest, GenerateFluxPro11TextToImageResponse, GENERATE_FLUX_PRO_11_TEXT_TO_IMAGE_PATH}; pub async fn generate_flux_pro_11_text_to_image( diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_pro_11_ultra_text_to_image.rs similarity index 74% rename from crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image.rs rename to crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_pro_11_ultra_text_to_image.rs index 6ba10770be..1b437532ee 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_flux_pro_11_ultra_text_to_image.rs @@ -2,7 +2,7 @@ use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::basic_json_post_request::basic_json_post_request; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::{GenerateFluxPro11UltraTextToImageRequest, GenerateFluxPro11UltraTextToImageResponse, GENERATE_FLUX_PRO_11_ULTRA_TEXT_TO_IMAGE_PATH}; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_ultra_text_to_image::{GenerateFluxPro11UltraTextToImageRequest, GenerateFluxPro11UltraTextToImageResponse, GENERATE_FLUX_PRO_11_ULTRA_TEXT_TO_IMAGE_PATH}; pub async fn generate_flux_pro_11_ultra_text_to_image( api_host: &ApiHost, diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_gpt_image_1_text_to_image.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_gpt_image_1_text_to_image.rs similarity index 75% rename from crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_gpt_image_1_text_to_image.rs rename to crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_gpt_image_1_text_to_image.rs index 2edacc3435..813c7361ab 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/generate_gpt_image_1_text_to_image.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/generate_gpt_image_1_text_to_image.rs @@ -2,7 +2,7 @@ use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::basic_json_post_request::basic_json_post_request; -use artcraft_api_defs::generate::image::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageRequest, GenerateGptImage1TextToImageResponse, GPT_IMAGE_1_TEXT_TO_IMAGE_PATH}; +use artcraft_api_defs::generate::image::text::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageRequest, GenerateGptImage1TextToImageResponse, GPT_IMAGE_1_TEXT_TO_IMAGE_PATH}; pub async fn generate_gpt_image_1_text_to_image( diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/mod.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/mod.rs new file mode 100644 index 0000000000..baf99b0235 --- /dev/null +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/text/mod.rs @@ -0,0 +1,5 @@ +pub mod generate_flux_1_dev_text_to_image; +pub mod generate_flux_1_schnell_text_to_image; +pub mod generate_flux_pro_11_text_to_image; +pub mod generate_flux_pro_11_ultra_text_to_image; +pub mod generate_gpt_image_1_text_to_image; diff --git a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_delete_request.rs b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_delete_request.rs index 05f3e42bf6..aad2bfef80 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_delete_request.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_delete_request.rs @@ -5,7 +5,6 @@ use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::constants::{APPLICATION_JSON, USER_AGENT}; use crate::utils::filter_bad_response::filter_bad_response; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse, GENERATE_FLUX_1_SCHNELL_TEXT_TO_IMAGE_PATH}; use log::{debug, info}; use reqwest::Client; use serde::de::DeserializeOwned; diff --git a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_get_request.rs b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_get_request.rs index 0adb217339..fed7bdba16 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_get_request.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_get_request.rs @@ -5,7 +5,6 @@ use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::constants::{APPLICATION_JSON, USER_AGENT}; use crate::utils::filter_bad_response::filter_bad_response; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse, GENERATE_FLUX_1_SCHNELL_TEXT_TO_IMAGE_PATH}; use log::debug; use reqwest::Client; use serde::de::DeserializeOwned; diff --git a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_post_request.rs b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_post_request.rs index 838e97b14c..fab32289b5 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_post_request.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_json_post_request.rs @@ -5,7 +5,6 @@ use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::constants::{APPLICATION_JSON, USER_AGENT}; use crate::utils::filter_bad_response::filter_bad_response; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse, GENERATE_FLUX_1_SCHNELL_TEXT_TO_IMAGE_PATH}; use log::{debug, info}; use reqwest::Client; use serde::de::DeserializeOwned; diff --git a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_query_string_post_request.rs b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_query_string_post_request.rs index 3567d67d10..09ae731736 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/utils/basic_query_string_post_request.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/utils/basic_query_string_post_request.rs @@ -5,7 +5,6 @@ use crate::error::storyteller_error::StorytellerError; use crate::utils::api_host::ApiHost; use crate::utils::constants::{APPLICATION_JSON, USER_AGENT}; use crate::utils::filter_bad_response::filter_bad_response; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse, GENERATE_FLUX_1_SCHNELL_TEXT_TO_IMAGE_PATH}; use errors::AnyhowResult; use log::{debug, info}; use reqwest::Client; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_text_to_image_webhook.rs index 64a15f877a..d2fdd56e80 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_text_to_image_webhook.rs @@ -13,10 +13,11 @@ pub struct FluxPro11Args<'a, U: IntoUrl> { pub num_images: FluxPro11NumImages, } +// TODO(bt,2026-01-01): This seems to disagree between Fal.ai and Fal.rs client libraries. #[derive(Copy, Clone, Debug)] pub enum FluxPro11AspectRatio { Square, // 1:1 - SquareHd, // 1:1 + SquareHd, // 1:1 (TODO: Is this in the API? I checked recently and don't see it.) LandscapeFourByThree, // 4:3 LandscapeSixteenByNine, // 16:9 PortraitThreeByFour, // 3:4 diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs index d0aaba2f76..2fbdd31f51 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs @@ -16,10 +16,14 @@ pub struct FluxPro11UltraArgs<'a, U: IntoUrl> { #[derive(Copy, Clone, Debug)] pub enum FluxPro11UltraAspectRatio { Square, // 1:1 + LandscapeThreeByTwo, // 3:2 LandscapeFourByThree, // 4:3 LandscapeSixteenByNine, // 16:9 + LandscapeTwentyOneByNine, // 21:9 + PortraitTwoByThree, // 2:3 PortraitThreeByFour, // 3:4 PortraitNineBySixteen, // 9:16 + PortraitNineByTwentyOne, // 9:21 //Custom { width: u32, height: u32 }, // TODO } @@ -44,10 +48,14 @@ pub async fn enqueue_flux_pro_11_ultra_text_to_image_webhook( let aspect_ratio = match args.aspect_ratio { FluxPro11UltraAspectRatio::Square => AspectRatioProperty::Property_1_1, + FluxPro11UltraAspectRatio::LandscapeThreeByTwo => AspectRatioProperty::Property_3_2, FluxPro11UltraAspectRatio::LandscapeFourByThree => AspectRatioProperty::Property_4_3, FluxPro11UltraAspectRatio::LandscapeSixteenByNine => AspectRatioProperty::Property_16_9, + FluxPro11UltraAspectRatio::LandscapeTwentyOneByNine => AspectRatioProperty::Property_21_9, + FluxPro11UltraAspectRatio::PortraitTwoByThree => AspectRatioProperty::Property_2_3, FluxPro11UltraAspectRatio::PortraitThreeByFour => AspectRatioProperty::Property_3_4, FluxPro11UltraAspectRatio::PortraitNineBySixteen => AspectRatioProperty::Property_9_16, + FluxPro11UltraAspectRatio::PortraitNineByTwentyOne => AspectRatioProperty::Property_9_21, }; let request = FluxProUltraTextToImageInput { diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/common_aspect_ratio.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/common_aspect_ratio.rs index 12efcfd902..8a7d1365e3 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/common_aspect_ratio.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/common_aspect_ratio.rs @@ -8,22 +8,35 @@ use serde_derive::{Deserialize, Serialize}; pub enum CommonAspectRatio { // Auto (eg. for image editing to use the source; used by Nano Banana Pro edit image, but not text-to-image) Auto, + // Square Square, + // Wide - WideFiveByFour, - WideFourByThree, WideThreeByTwo, + WideFourByThree, + WideFiveByFour, WideSixteenByNine, WideTwentyOneByNine, + // Tall - TallFourByFive, - TallThreeByFour, TallTwoByThree, + TallThreeByFour, + TallFourByFive, TallNineBySixteen, TallNineByTwentyOne, + // Imprecise semantic values that we probably remap to other meanings // on a model-by-model basis. Wide, Tall, + + // Auto values that bake in resolution + // These are from the Seedream models + Auto2k, + Auto4k, + + // Defined aspect ratios that bake in resolution + // These are from the Seedream models + SquareHd, } diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_1_dev.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_1_dev.rs new file mode 100644 index 0000000000..72f785e250 --- /dev/null +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_1_dev.rs @@ -0,0 +1,31 @@ +use crate::core::api_adapters::aspect_ratio::common_aspect_ratio::CommonAspectRatio; +use artcraft_api_defs::generate::image::text::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageAspectRatio; + +pub fn aspect_ratio_to_artcraft_flux_1_dev(aspect_ratio: CommonAspectRatio) -> GenerateFlux1DevTextToImageAspectRatio { + match aspect_ratio { + // Exact + CommonAspectRatio::Square => GenerateFlux1DevTextToImageAspectRatio::Square, + CommonAspectRatio::SquareHd => GenerateFlux1DevTextToImageAspectRatio::SquareHd, + CommonAspectRatio::WideFourByThree => GenerateFlux1DevTextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::WideSixteenByNine => GenerateFlux1DevTextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::TallThreeByFour => GenerateFlux1DevTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::TallNineBySixteen => GenerateFlux1DevTextToImageAspectRatio::PortraitNineBySixteen, + + // Non-matching aspect ratios, use closest neighbor + CommonAspectRatio::TallFourByFive => GenerateFlux1DevTextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::TallNineByTwentyOne => GenerateFlux1DevTextToImageAspectRatio::PortraitNineBySixteen, + CommonAspectRatio::TallTwoByThree => GenerateFlux1DevTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::WideFiveByFour => GenerateFlux1DevTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::WideThreeByTwo => GenerateFlux1DevTextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::WideTwentyOneByNine => GenerateFlux1DevTextToImageAspectRatio::LandscapeSixteenByNine, + + // Special + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => GenerateFlux1DevTextToImageAspectRatio::Square, + + // Semantic values + CommonAspectRatio::Wide => GenerateFlux1DevTextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::Tall => GenerateFlux1DevTextToImageAspectRatio::PortraitNineBySixteen, + } +} diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_1_schnell.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_1_schnell.rs new file mode 100644 index 0000000000..1cbe70d0b0 --- /dev/null +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_1_schnell.rs @@ -0,0 +1,31 @@ +use crate::core::api_adapters::aspect_ratio::common_aspect_ratio::CommonAspectRatio; +use artcraft_api_defs::generate::image::text::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageAspectRatio; + +pub fn aspect_ratio_to_artcraft_flux_1_schnell(aspect_ratio: CommonAspectRatio) -> GenerateFlux1SchnellTextToImageAspectRatio { + match aspect_ratio { + // Exact + CommonAspectRatio::Square => GenerateFlux1SchnellTextToImageAspectRatio::Square, + CommonAspectRatio::SquareHd => GenerateFlux1SchnellTextToImageAspectRatio::SquareHd, + CommonAspectRatio::WideFourByThree => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::WideSixteenByNine => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::TallThreeByFour => GenerateFlux1SchnellTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::TallNineBySixteen => GenerateFlux1SchnellTextToImageAspectRatio::PortraitNineBySixteen, + + // Non-matching aspect ratios, use closest neighbor + CommonAspectRatio::TallFourByFive => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::TallNineByTwentyOne => GenerateFlux1SchnellTextToImageAspectRatio::PortraitNineBySixteen, + CommonAspectRatio::TallTwoByThree => GenerateFlux1SchnellTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::WideFiveByFour => GenerateFlux1SchnellTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::WideThreeByTwo => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::WideTwentyOneByNine => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeSixteenByNine, + + // Special + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => GenerateFlux1SchnellTextToImageAspectRatio::Square, + + // Semantic values + CommonAspectRatio::Wide => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::Tall => GenerateFlux1SchnellTextToImageAspectRatio::PortraitNineBySixteen, + } +} diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_pro_1p1.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_pro_1p1.rs new file mode 100644 index 0000000000..f0e6babd92 --- /dev/null +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_pro_1p1.rs @@ -0,0 +1,33 @@ +use crate::core::api_adapters::aspect_ratio::common_aspect_ratio::CommonAspectRatio; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageAspectRatio; + +pub fn aspect_ratio_to_artcraft_flux_pro_1p1(aspect_ratio: CommonAspectRatio) -> GenerateFluxPro11TextToImageAspectRatio { + match aspect_ratio { + // Exact + CommonAspectRatio::Square => GenerateFluxPro11TextToImageAspectRatio::Square, + CommonAspectRatio::WideFourByThree => GenerateFluxPro11TextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::WideSixteenByNine => GenerateFluxPro11TextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::TallThreeByFour => GenerateFluxPro11TextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::TallNineBySixteen => GenerateFluxPro11TextToImageAspectRatio::PortraitNineBySixteen, + + // Non-matching aspect ratios, use closest neighbor + CommonAspectRatio::TallFourByFive => GenerateFluxPro11TextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::TallNineByTwentyOne => GenerateFluxPro11TextToImageAspectRatio::PortraitNineBySixteen, + CommonAspectRatio::TallTwoByThree => GenerateFluxPro11TextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::WideFiveByFour => GenerateFluxPro11TextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::WideThreeByTwo => GenerateFluxPro11TextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::WideTwentyOneByNine => GenerateFluxPro11TextToImageAspectRatio::LandscapeSixteenByNine, + + // Best match + CommonAspectRatio::SquareHd => GenerateFluxPro11TextToImageAspectRatio::Square, + + // Special + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => GenerateFluxPro11TextToImageAspectRatio::Square, + + // Semantic values + CommonAspectRatio::Wide => GenerateFluxPro11TextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::Tall => GenerateFluxPro11TextToImageAspectRatio::PortraitNineBySixteen, + } +} diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_pro_1p1_ultra.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_pro_1p1_ultra.rs new file mode 100644 index 0000000000..f49a6208e7 --- /dev/null +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_flux_pro_1p1_ultra.rs @@ -0,0 +1,33 @@ +use crate::core::api_adapters::aspect_ratio::common_aspect_ratio::CommonAspectRatio; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageAspectRatio; + +pub fn aspect_ratio_to_artcraft_flux_pro_1p1_ultra(aspect_ratio: CommonAspectRatio) -> GenerateFluxPro11UltraTextToImageAspectRatio { + match aspect_ratio { + // Exact + CommonAspectRatio::Square => GenerateFluxPro11UltraTextToImageAspectRatio::Square, + CommonAspectRatio::WideFourByThree => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeFourByThree, + CommonAspectRatio::WideThreeByTwo => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeThreeByTwo, + CommonAspectRatio::WideSixteenByNine => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::WideTwentyOneByNine => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeTwentyOneByNine, + CommonAspectRatio::TallThreeByFour => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::TallTwoByThree => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitTwoByThree, + CommonAspectRatio::TallNineBySixteen => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineBySixteen, + CommonAspectRatio::TallNineByTwentyOne => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineByTwentyOne, + + // Non-matching aspect ratios, use closest neighbor + CommonAspectRatio::WideFiveByFour => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitThreeByFour, + CommonAspectRatio::TallFourByFive => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeFourByThree, + + // Best match + CommonAspectRatio::SquareHd => GenerateFluxPro11UltraTextToImageAspectRatio::Square, + + // Special + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => GenerateFluxPro11UltraTextToImageAspectRatio::Square, + + // Semantic values + CommonAspectRatio::Wide => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeSixteenByNine, + CommonAspectRatio::Tall => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineBySixteen, + } +} diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_gpt_image_1p5.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_gpt_image_1p5.rs index c01ff29e1e..e6db82431c 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_gpt_image_1p5.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_gpt_image_1p5.rs @@ -9,7 +9,12 @@ pub fn aspect_ratio_to_artcraft_gpt_image_1p5(aspect_ratio: CommonAspectRatio) - CommonAspectRatio::Tall => GptImage1p5MultiFunctionImageGenSize::Tall, // Non-matching - CommonAspectRatio::Auto => GptImage1p5MultiFunctionImageGenSize::Square, + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => GptImage1p5MultiFunctionImageGenSize::Square, + + // Mismatch - square + CommonAspectRatio::SquareHd => GptImage1p5MultiFunctionImageGenSize::Square, // Mismatch - wide CommonAspectRatio::WideThreeByTwo diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana.rs index 3488097ec9..d98e910281 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana.rs @@ -16,11 +16,14 @@ pub fn aspect_ratio_to_artcraft_nano_banana(aspect_ratio: CommonAspectRatio) -> CommonAspectRatio::TallNineBySixteen => NanoBananaMultiFunctionImageGenAspectRatio::NineBySixteen, // Special // NB: this is only for image-to-image editing, not text-to-image. - CommonAspectRatio::Auto => NanoBananaMultiFunctionImageGenAspectRatio::Auto, + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => NanoBananaMultiFunctionImageGenAspectRatio::Auto, // NB: "9:21" value does not exist. Interpolated. CommonAspectRatio::TallNineByTwentyOne => NanoBananaMultiFunctionImageGenAspectRatio::NineBySixteen, // Semantic values CommonAspectRatio::Wide => NanoBananaMultiFunctionImageGenAspectRatio::SixteenByNine, CommonAspectRatio::Tall => NanoBananaMultiFunctionImageGenAspectRatio::NineBySixteen, + CommonAspectRatio::SquareHd => NanoBananaMultiFunctionImageGenAspectRatio::OneByOne, } } diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana_pro.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana_pro.rs index 49cbbfd73c..3171a8c5c1 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana_pro.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_nano_banana_pro.rs @@ -16,11 +16,14 @@ pub fn aspect_ratio_to_artcraft_nano_banana_pro(aspect_ratio: CommonAspectRatio) CommonAspectRatio::TallNineBySixteen => NanoBananaProMultiFunctionImageGenAspectRatio::NineBySixteen, // Special // NB: this is only for image-to-image editing, not text-to-image. - CommonAspectRatio::Auto => NanoBananaProMultiFunctionImageGenAspectRatio::Auto, + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => NanoBananaProMultiFunctionImageGenAspectRatio::Auto, // NB: "9:21" value does not exist. Interpolated. CommonAspectRatio::TallNineByTwentyOne => NanoBananaProMultiFunctionImageGenAspectRatio::NineBySixteen, // Semantic values CommonAspectRatio::Wide => NanoBananaProMultiFunctionImageGenAspectRatio::SixteenByNine, CommonAspectRatio::Tall => NanoBananaProMultiFunctionImageGenAspectRatio::NineBySixteen, + CommonAspectRatio::SquareHd => NanoBananaProMultiFunctionImageGenAspectRatio::OneByOne, } } diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_seedream_4.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_seedream_4.rs new file mode 100644 index 0000000000..d09fa7f4fb --- /dev/null +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_seedream_4.rs @@ -0,0 +1,29 @@ +use crate::core::api_adapters::aspect_ratio::common_aspect_ratio::CommonAspectRatio; +use artcraft_api_defs::generate::image::multi_function::bytedance_seedream_v4_multi_function_image_gen::BytedanceSeedreamV4MultiFunctionImageGenImageSize; + +pub fn aspect_ratio_to_artcraft_seedream_4(aspect_ratio: CommonAspectRatio) -> BytedanceSeedreamV4MultiFunctionImageGenImageSize { + match aspect_ratio { + // Exact + CommonAspectRatio::Auto => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Auto, + CommonAspectRatio::Auto2k => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Auto2k, + CommonAspectRatio::Auto4k => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Auto4k, + CommonAspectRatio::Square => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, + CommonAspectRatio::SquareHd => BytedanceSeedreamV4MultiFunctionImageGenImageSize::SquareHd, + CommonAspectRatio::WideFourByThree => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeFourThree, + CommonAspectRatio::WideSixteenByNine => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine, + CommonAspectRatio::TallThreeByFour => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitFourThree, + CommonAspectRatio::TallNineBySixteen => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine, + + // Non-matching aspect ratios, use closest neighbor + CommonAspectRatio::WideFiveByFour => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeFourThree, + CommonAspectRatio::WideThreeByTwo => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeFourThree, + CommonAspectRatio::WideTwentyOneByNine => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine, + CommonAspectRatio::TallFourByFive => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitFourThree, + CommonAspectRatio::TallTwoByThree => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitFourThree, + CommonAspectRatio::TallNineByTwentyOne => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine, + + // Semantic values + CommonAspectRatio::Wide => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine, + CommonAspectRatio::Tall => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine, + } +} diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_seedream_4p5.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_seedream_4p5.rs new file mode 100644 index 0000000000..71fae240f7 --- /dev/null +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_artcraft_seedream_4p5.rs @@ -0,0 +1,29 @@ +use crate::core::api_adapters::aspect_ratio::common_aspect_ratio::CommonAspectRatio; +use artcraft_api_defs::generate::image::multi_function::bytedance_seedream_v4p5_multi_function_image_gen::BytedanceSeedreamV4p5MultiFunctionImageGenImageSize; + +pub fn aspect_ratio_to_artcraft_seedream_4p5(aspect_ratio: CommonAspectRatio) -> BytedanceSeedreamV4p5MultiFunctionImageGenImageSize { + match aspect_ratio { + // Exact + CommonAspectRatio::Auto2k => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Auto2k, + CommonAspectRatio::Auto4k => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Auto4k, + CommonAspectRatio::Square => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, + CommonAspectRatio::SquareHd => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::SquareHd, + CommonAspectRatio::WideFourByThree => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeFourThree, + CommonAspectRatio::WideSixteenByNine => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine, + CommonAspectRatio::TallThreeByFour => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitFourThree, + CommonAspectRatio::TallNineBySixteen => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine, + + // Non-matching aspect ratios, use closest neighbor + CommonAspectRatio::Auto => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Auto4k, + CommonAspectRatio::WideFiveByFour => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeFourThree, + CommonAspectRatio::WideThreeByTwo => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeFourThree, + CommonAspectRatio::WideTwentyOneByNine => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine, + CommonAspectRatio::TallFourByFive => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitFourThree, + CommonAspectRatio::TallTwoByThree => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitFourThree, + CommonAspectRatio::TallNineByTwentyOne => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine, + + // Semantic values + CommonAspectRatio::Wide => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine, + CommonAspectRatio::Tall => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine, + } +} diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs index f2f7305198..175eb9d718 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_grok_image.rs @@ -7,9 +7,14 @@ pub fn aspect_ratio_to_grok_image(aspect_ratio: CommonAspectRatio) -> ClientMess CommonAspectRatio::Square => ClientMessageAspectRatio::Square, CommonAspectRatio::WideThreeByTwo => ClientMessageAspectRatio::WideThreeByTwo, CommonAspectRatio::TallTwoByThree => ClientMessageAspectRatio::TallTwoByThree, + + // Close enough + CommonAspectRatio::SquareHd => ClientMessageAspectRatio::Square, // Non-matching - CommonAspectRatio::Auto => ClientMessageAspectRatio::Square, + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => ClientMessageAspectRatio::Square, // Mismatch - wide CommonAspectRatio::Wide diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_sora_native_gpt_image_1.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_sora_native_gpt_image_1.rs index 5efda6e287..e929776e0d 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_sora_native_gpt_image_1.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/aspect_ratio_to_sora_native_gpt_image_1.rs @@ -9,7 +9,12 @@ pub fn aspect_ratio_to_sora_native_gpt_image_1(aspect_ratio: CommonAspectRatio) CommonAspectRatio::Tall => ImageSize::Tall, // Non-matching - CommonAspectRatio::Auto => ImageSize::Square, + CommonAspectRatio::Auto + | CommonAspectRatio::Auto2k + | CommonAspectRatio::Auto4k => ImageSize::Square, + + // Mismatch - square + CommonAspectRatio::SquareHd => ImageSize::Square, // Mismatch - wide CommonAspectRatio::WideThreeByTwo diff --git a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs index 37a0c0790a..c4623aa762 100644 --- a/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs +++ b/crates/desktop/artcraft/src/core/api_adapters/aspect_ratio/convert/mod.rs @@ -1,6 +1,12 @@ +pub mod aspect_ratio_to_artcraft_flux_1_dev; +pub mod aspect_ratio_to_artcraft_flux_1_schnell; +pub mod aspect_ratio_to_artcraft_flux_pro_1p1; +pub mod aspect_ratio_to_artcraft_flux_pro_1p1_ultra; pub mod aspect_ratio_to_artcraft_gpt_image_1; pub mod aspect_ratio_to_artcraft_gpt_image_1p5; pub mod aspect_ratio_to_artcraft_nano_banana; pub mod aspect_ratio_to_artcraft_nano_banana_pro; +pub mod aspect_ratio_to_artcraft_seedream_4; +pub mod aspect_ratio_to_artcraft_seedream_4p5; pub mod aspect_ratio_to_grok_image; pub mod aspect_ratio_to_sora_native_gpt_image_1; \ No newline at end of file diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/artcraft/handle_generic_bg_removal_artcraft.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/artcraft/handle_generic_bg_removal_artcraft.rs index 433120340b..5d60a9360f 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/artcraft/handle_generic_bg_removal_artcraft.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_bg_removal/artcraft/handle_generic_bg_removal_artcraft.rs @@ -13,23 +13,13 @@ use crate::services::sora::state::sora_credential_manager::SoraCredentialManager use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; -use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; -use artcraft_api_defs::generate::image::remove_image_background::RemoveImageBackgroundRequest; +use artcraft_api_defs::generate::image::bg_removal::remove_image_background::RemoveImageBackgroundRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; use log::{error, info}; use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet; -use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; -use storyteller_client::endpoints::generate::image::remove_image_background::remove_image_background; +use storyteller_client::endpoints::generate::image::bg_removal::remove_image_background::remove_image_background; use storyteller_client::endpoints::media_files::upload_image_media_file_from_file::{upload_image_media_file_from_file, UploadImageFromFileArgs}; use tauri::AppHandle; use tokens::tokens::media_files::MediaFileToken; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_flux_kontext_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_flux_kontext_edit.rs index 57320206c1..a007122208 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_flux_kontext_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_flux_kontext_edit.rs @@ -13,20 +13,12 @@ use crate::services::storyteller::state::storyteller_credential_manager::Storyte use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::{FluxProKontextMaxEditImageNumImages, FluxProKontextMaxEditImageRequest}; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; use log::{error, info}; use storyteller_client::endpoints::generate::image::edit::flux_pro_kontext_max_edit_image::flux_pro_kontext_max_edit_image; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; use tauri::AppHandle; pub async fn handle_artcraft_flux_kontext_edit( diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1_edit.rs index 6558570e81..7b4079d060 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1_edit.rs @@ -12,19 +12,11 @@ use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; use log::{error, info}; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; use tauri::AppHandle; const MAX_IMAGES: usize = 4; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1p5_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1p5_edit.rs index ce9c15352f..5f1fa5f6c9 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1p5_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_gpt_image_1p5_edit.rs @@ -14,20 +14,12 @@ use crate::services::sora::state::sora_credential_manager::SoraCredentialManager use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use artcraft_api_defs::generate::image::multi_function::gpt_image_1p5_multi_function_image_gen::{GptImage1p5MultiFunctionImageGenNumImages, GptImage1p5MultiFunctionImageGenQuality, GptImage1p5MultiFunctionImageGenRequest, GptImage1p5MultiFunctionImageGenSize}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; use log::{error, info}; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; use storyteller_client::endpoints::generate::image::multi_function::gpt_image_1p5_multi_function_image_gen_image::gpt_image_1p5_multi_function_image_gen; use tauri::AppHandle; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_edit.rs index 683db6276c..b4f1d3eb21 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_edit.rs @@ -16,10 +16,6 @@ use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::{FluxProKontextMaxEditImageNumImages, FluxProKontextMaxEditImageRequest}; use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemini25FlashEditImageNumImages, Gemini25FlashEditImageRequest}; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use artcraft_api_defs::generate::image::multi_function::nano_banana_multi_function_image_gen::{NanoBananaMultiFunctionImageGenAspectRatio, NanoBananaMultiFunctionImageGenNumImages, NanoBananaMultiFunctionImageGenRequest}; use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::{NanoBananaProMultiFunctionImageGenAspectRatio, NanoBananaProMultiFunctionImageGenRequest}; use enums::common::generation_provider::GenerationProvider; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_pro_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_pro_edit.rs index 0bec15e383..3886ca6a36 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_pro_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_nano_banana_pro_edit.rs @@ -17,10 +17,6 @@ use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::{FluxProKontextMaxEditImageNumImages, FluxProKontextMaxEditImageRequest}; use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemini25FlashEditImageNumImages, Gemini25FlashEditImageRequest}; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::{NanoBananaProMultiFunctionImageGenAspectRatio, NanoBananaProMultiFunctionImageGenImageResolution, NanoBananaProMultiFunctionImageGenNumImages, NanoBananaProMultiFunctionImageGenRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4_edit.rs index eec53cf37a..7d04a7f331 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4_edit.rs @@ -1,3 +1,5 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_nano_banana_pro::aspect_ratio_to_artcraft_nano_banana_pro; +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_seedream_4::aspect_ratio_to_artcraft_seedream_4; use crate::core::commands::enqueue::generate_error::{BadInputReason, GenerateError}; use crate::core::commands::enqueue::image_edit::enqueue_edit_image_command::{EditImageQuality, EditImageSize, EnqueueEditImageCommand}; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; @@ -12,6 +14,7 @@ use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; use artcraft_api_defs::generate::image::multi_function::bytedance_seedream_v4_multi_function_image_gen::{BytedanceSeedreamV4MultiFunctionImageGenImageSize, BytedanceSeedreamV4MultiFunctionImageGenNumImages, BytedanceSeedreamV4MultiFunctionImageGenRequest}; +use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::NanoBananaProMultiFunctionImageGenAspectRatio; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; @@ -40,13 +43,7 @@ pub async fn handle_artcraft_seedream_4_edit( let uuid_idempotency_token = generate_random_uuid(); - let image_size = request.aspect_ratio - .map(|size| match size { - EditImageSize::Auto => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, - EditImageSize::Square => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, - EditImageSize::Tall => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine, - EditImageSize::Wide => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine, - }); + let image_size = get_aspect_ratio(request); let num_images = match request.image_count { None => None, @@ -117,3 +114,24 @@ pub async fn handle_artcraft_seedream_4_edit( task_type: TaskType::ImageGeneration, }) } + +fn get_aspect_ratio(request: &EnqueueEditImageCommand) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_seedream_4(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect_ratio = match aspect_ratio { + EditImageSize::Auto => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, + EditImageSize::Square => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, + EditImageSize::Tall => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine, + EditImageSize::Wide => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine, + }; + return Some(aspect_ratio); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4p5_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4p5_edit.rs index f0966bc49a..fe51b59bd7 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4p5_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/artcraft/handle_artcraft_seedream_4p5_edit.rs @@ -1,3 +1,5 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_seedream_4::aspect_ratio_to_artcraft_seedream_4; +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_seedream_4p5::aspect_ratio_to_artcraft_seedream_4p5; use crate::core::commands::enqueue::generate_error::{BadInputReason, GenerateError}; use crate::core::commands::enqueue::image_edit::enqueue_edit_image_command::{EditImageQuality, EditImageSize, EnqueueEditImageCommand}; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; @@ -40,13 +42,7 @@ pub async fn handle_artcraft_seedream_4p5_edit( let uuid_idempotency_token = generate_random_uuid(); - let image_size = request.aspect_ratio - .map(|size| match size { - EditImageSize::Auto => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, - EditImageSize::Square => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, - EditImageSize::Tall => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine, - EditImageSize::Wide => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine, - }); + let image_size = get_aspect_ratio(request); let num_images = match request.image_count { None => None, @@ -117,3 +113,24 @@ pub async fn handle_artcraft_seedream_4p5_edit( task_type: TaskType::ImageGeneration, }) } + +fn get_aspect_ratio(request: &EnqueueEditImageCommand) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_seedream_4p5(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect_ratio = match aspect_ratio { + EditImageSize::Auto => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, + EditImageSize::Square => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, + EditImageSize::Tall => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine, + EditImageSize::Wide => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine, + }; + return Some(aspect_ratio); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/sora/handle_sora_gpt_image_1_edit.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/sora/handle_sora_gpt_image_1_edit.rs index 1d72abda44..de8edb6b46 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/sora/handle_sora_gpt_image_1_edit.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/sora/handle_sora_gpt_image_1_edit.rs @@ -17,10 +17,6 @@ use crate::services::sora::state::sora_credential_manager::SoraCredentialManager use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use errors::AnyhowResult; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_dev_juggernaut_inpaint.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_dev_juggernaut_inpaint.rs index 64e5367b26..9e5e136c55 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_dev_juggernaut_inpaint.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_dev_juggernaut_inpaint.rs @@ -15,10 +15,6 @@ use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use artcraft_api_defs::generate::image::inpaint::flux_dev_juggernaut_inpaint_image::{FluxDevJuggernautInpaintImageNumImages, FluxDevJuggernautInpaintImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; @@ -30,10 +26,6 @@ use log::{error, info}; use mimetypes::mimetype_info::mimetype_info::MimetypeInfo; use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; use storyteller_client::endpoints::generate::image::inpaint::flux_dev_juggernaut_inpaint_image::flux_dev_juggernaut_inpaint_image; use storyteller_client::endpoints::generate::image::inpaint::flux_pro_1_inpaint_image::flux_pro_1_inpaint_image; use storyteller_client::endpoints::media_files::get_media_file::get_media_file; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_1_inpaint.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_1_inpaint.rs index 3caec3bd53..8dd05ca7d5 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_1_inpaint.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_1_inpaint.rs @@ -15,10 +15,6 @@ use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use artcraft_api_defs::generate::image::inpaint::flux_pro_1_inpaint_image::{FluxPro1InpaintImageNumImages, FluxPro1InpaintImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; @@ -30,10 +26,6 @@ use log::{error, info}; use mimetypes::mimetype_info::mimetype_info::MimetypeInfo; use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; use storyteller_client::endpoints::generate::image::inpaint::flux_pro_1_inpaint_image::flux_pro_1_inpaint_image; use storyteller_client::endpoints::media_files::get_media_file::get_media_file; use storyteller_client::endpoints::media_files::upload_image_media_file_from_bytes::{upload_image_media_file_from_bytes, ImageType, UploadImageBytesArgs}; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_kontext_inpaint.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_kontext_inpaint.rs index ae0bfda53e..445364dbab 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_kontext_inpaint.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_flux_pro_kontext_inpaint.rs @@ -16,10 +16,6 @@ use crate::services::storyteller::state::storyteller_credential_manager::Storyte use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::{FluxProKontextMaxEditImageNumImages, FluxProKontextMaxEditImageRequest}; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use artcraft_api_defs::generate::image::inpaint::flux_pro_1_inpaint_image::{FluxPro1InpaintImageNumImages, FluxPro1InpaintImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; @@ -32,10 +28,6 @@ use mimetypes::mimetype_info::mimetype_info::MimetypeInfo; use storyteller_client::credentials::storyteller_credential_set::StorytellerCredentialSet; use storyteller_client::endpoints::generate::image::edit::flux_pro_kontext_max_edit_image::flux_pro_kontext_max_edit_image; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; use storyteller_client::endpoints::generate::image::inpaint::flux_pro_1_inpaint_image::flux_pro_1_inpaint_image; use storyteller_client::endpoints::media_files::get_media_file::get_media_file; use storyteller_client::endpoints::media_files::upload_image_media_file_from_bytes::{upload_image_media_file_from_bytes, ImageType, UploadImageBytesArgs}; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_nano_banana_inpaint.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_nano_banana_inpaint.rs index b79e752d5c..44aed44cf0 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_nano_banana_inpaint.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_inpaint/artcraft/handle_artcraft_nano_banana_inpaint.rs @@ -17,10 +17,6 @@ use anyhow::anyhow; use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::{FluxProKontextMaxEditImageNumImages, FluxProKontextMaxEditImageRequest}; use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemini25FlashEditImageNumImages, Gemini25FlashEditImageRequest}; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageRequest; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageRequest; use artcraft_api_defs::generate::image::inpaint::flux_pro_1_inpaint_image::{FluxPro1InpaintImageNumImages, FluxPro1InpaintImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; @@ -34,10 +30,6 @@ use storyteller_client::credentials::storyteller_credential_set::StorytellerCred use storyteller_client::endpoints::generate::image::edit::flux_pro_kontext_max_edit_image::flux_pro_kontext_max_edit_image; use storyteller_client::endpoints::generate::image::edit::gemini_25_flash_edit_image::gemini_25_flash_edit_image; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; use storyteller_client::endpoints::generate::image::inpaint::flux_pro_1_inpaint_image::flux_pro_1_inpaint_image; use storyteller_client::endpoints::media_files::get_media_file::get_media_file; use storyteller_client::endpoints::media_files::upload_image_media_file_from_bytes::{upload_image_media_file_from_bytes, ImageType, UploadImageBytesArgs}; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_dev_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_dev_text_to_image.rs index 49b18ee7b5..7ee0a33724 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_dev_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_dev_text_to_image.rs @@ -1,15 +1,18 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_flux_1_dev::aspect_ratio_to_artcraft_flux_1_dev; +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_nano_banana_pro::aspect_ratio_to_artcraft_nano_banana_pro; use crate::core::commands::enqueue::generate_error::GenerateError; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize}; use crate::core::events::generation_events::common::GenerationModel; use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::{GenerateFlux1DevTextToImageAspectRatio, GenerateFlux1DevTextToImageNumImages, GenerateFlux1DevTextToImageRequest}; +use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::NanoBananaProMultiFunctionImageGenAspectRatio; +use artcraft_api_defs::generate::image::text::generate_flux_1_dev_text_to_image::{GenerateFlux1DevTextToImageAspectRatio, GenerateFlux1DevTextToImageNumImages, GenerateFlux1DevTextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; -use log::{error, info}; use idempotency::uuid::generate_random_uuid; -use storyteller_client::endpoints::generate::image::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; +use log::{error, info}; +use storyteller_client::endpoints::generate::image::text::generate_flux_1_dev_text_to_image::generate_flux_1_dev_text_to_image; pub async fn handle_artcraft_flux_1_dev_text_to_image( request: &EnqueueTextToImageRequest, @@ -30,14 +33,7 @@ pub async fn handle_artcraft_flux_1_dev_text_to_image( let request = GenerateFlux1DevTextToImageRequest { uuid_idempotency_token, prompt: request.prompt.clone(), - aspect_ratio: request.aspect_ratio - .map(|aspect| match aspect { - // TODO(bt,2025-07-14): Support other aspect ratios. - TextToImageSize::Tall => GenerateFlux1DevTextToImageAspectRatio::PortraitNineBySixteen, - TextToImageSize::Wide => GenerateFlux1DevTextToImageAspectRatio::LandscapeSixteenByNine, - TextToImageSize::Auto => GenerateFlux1DevTextToImageAspectRatio::SquareHd, - TextToImageSize::Square => GenerateFlux1DevTextToImageAspectRatio::SquareHd, - }), + aspect_ratio: get_aspect_ratio(request), num_images: request.number_images .and_then(|num| match num { 1 => Some(GenerateFlux1DevTextToImageNumImages::One), @@ -72,3 +68,24 @@ pub async fn handle_artcraft_flux_1_dev_text_to_image( provider_job_id: Some(job_token.to_string()), }) } + +fn get_aspect_ratio(request: &EnqueueTextToImageRequest) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_flux_1_dev(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect = match aspect_ratio { + TextToImageSize::Tall => GenerateFlux1DevTextToImageAspectRatio::PortraitNineBySixteen, + TextToImageSize::Wide => GenerateFlux1DevTextToImageAspectRatio::LandscapeSixteenByNine, + TextToImageSize::Auto => GenerateFlux1DevTextToImageAspectRatio::SquareHd, + TextToImageSize::Square => GenerateFlux1DevTextToImageAspectRatio::SquareHd, + }; + return Some(aspect); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_schnell_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_schnell_text_to_image.rs index fb9f0f4700..09814b66a6 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_schnell_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_1_schnell_text_to_image.rs @@ -1,15 +1,17 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_flux_1_dev::aspect_ratio_to_artcraft_flux_1_dev; +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_flux_1_schnell::aspect_ratio_to_artcraft_flux_1_schnell; use crate::core::commands::enqueue::generate_error::GenerateError; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize}; use crate::core::events::generation_events::common::GenerationModel; use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageAspectRatio, GenerateFlux1SchnellTextToImageNumImages, GenerateFlux1SchnellTextToImageRequest}; +use artcraft_api_defs::generate::image::text::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageAspectRatio, GenerateFlux1SchnellTextToImageNumImages, GenerateFlux1SchnellTextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; -use log::{error, info}; use idempotency::uuid::generate_random_uuid; -use storyteller_client::endpoints::generate::image::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; +use log::{error, info}; +use storyteller_client::endpoints::generate::image::text::generate_flux_1_schnell_text_to_image::generate_flux_1_schnell_text_to_image; pub async fn handle_artcraft_flux_1_schnell_text_to_image( request: &EnqueueTextToImageRequest, @@ -30,14 +32,7 @@ pub async fn handle_artcraft_flux_1_schnell_text_to_image( let request = GenerateFlux1SchnellTextToImageRequest { uuid_idempotency_token, prompt: request.prompt.clone(), - aspect_ratio: request.aspect_ratio - .map(|aspect| match aspect { - // TODO(bt,2025-07-14): Support other aspect ratios. - TextToImageSize::Tall => GenerateFlux1SchnellTextToImageAspectRatio::PortraitNineBySixteen, - TextToImageSize::Wide => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeSixteenByNine, - TextToImageSize::Square => GenerateFlux1SchnellTextToImageAspectRatio::SquareHd, - TextToImageSize::Auto => GenerateFlux1SchnellTextToImageAspectRatio::SquareHd, - }), + aspect_ratio: get_aspect_ratio(request), num_images: request.number_images .and_then(|num| match num { 1 => Some(GenerateFlux1SchnellTextToImageNumImages::One), @@ -72,3 +67,24 @@ pub async fn handle_artcraft_flux_1_schnell_text_to_image( provider_job_id: Some(job_token.to_string()), }) } + +fn get_aspect_ratio(request: &EnqueueTextToImageRequest) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_flux_1_schnell(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect = match aspect_ratio { + TextToImageSize::Tall => GenerateFlux1SchnellTextToImageAspectRatio::PortraitNineBySixteen, + TextToImageSize::Wide => GenerateFlux1SchnellTextToImageAspectRatio::LandscapeSixteenByNine, + TextToImageSize::Auto => GenerateFlux1SchnellTextToImageAspectRatio::SquareHd, + TextToImageSize::Square => GenerateFlux1SchnellTextToImageAspectRatio::SquareHd, + }; + return Some(aspect); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_text_to_image.rs index b6a8dd09b8..5ec0222020 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_text_to_image.rs @@ -1,15 +1,17 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_flux_1_schnell::aspect_ratio_to_artcraft_flux_1_schnell; +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_flux_pro_1p1::aspect_ratio_to_artcraft_flux_pro_1p1; use crate::core::commands::enqueue::generate_error::GenerateError; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize}; use crate::core::events::generation_events::common::GenerationModel; use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::{GenerateFluxPro11TextToImageAspectRatio, GenerateFluxPro11TextToImageNumImages, GenerateFluxPro11TextToImageRequest}; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::{GenerateFluxPro11TextToImageAspectRatio, GenerateFluxPro11TextToImageNumImages, GenerateFluxPro11TextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; -use log::{error, info}; use idempotency::uuid::generate_random_uuid; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; +use log::{error, info}; +use storyteller_client::endpoints::generate::image::text::generate_flux_pro_11_text_to_image::generate_flux_pro_11_text_to_image; pub async fn handle_artcraft_flux_pro_1p1_text_to_image( request: &EnqueueTextToImageRequest, @@ -30,14 +32,7 @@ pub async fn handle_artcraft_flux_pro_1p1_text_to_image( let request = GenerateFluxPro11TextToImageRequest { uuid_idempotency_token, prompt: request.prompt.clone(), - aspect_ratio: request.aspect_ratio - .map(|aspect| match aspect { - // TODO(bt,2025-07-14): Support other aspect ratios. - TextToImageSize::Tall => GenerateFluxPro11TextToImageAspectRatio::PortraitNineBySixteen, - TextToImageSize::Wide => GenerateFluxPro11TextToImageAspectRatio::LandscapeSixteenByNine, - TextToImageSize::Square => GenerateFluxPro11TextToImageAspectRatio::Square, - TextToImageSize::Auto => GenerateFluxPro11TextToImageAspectRatio::Square, - }), + aspect_ratio: get_aspect_ratio(request), num_images: request.number_images .and_then(|num| match num { 1 => Some(GenerateFluxPro11TextToImageNumImages::One), @@ -72,3 +67,24 @@ pub async fn handle_artcraft_flux_pro_1p1_text_to_image( provider_job_id: Some(job_token.to_string()), }) } + +fn get_aspect_ratio(request: &EnqueueTextToImageRequest) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_flux_pro_1p1(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect = match aspect_ratio { + TextToImageSize::Tall => GenerateFluxPro11TextToImageAspectRatio::PortraitNineBySixteen, + TextToImageSize::Wide => GenerateFluxPro11TextToImageAspectRatio::LandscapeSixteenByNine, + TextToImageSize::Square => GenerateFluxPro11TextToImageAspectRatio::Square, + TextToImageSize::Auto => GenerateFluxPro11TextToImageAspectRatio::Square, + }; + return Some(aspect); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_ultra_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_ultra_text_to_image.rs index 4fc37c3cbd..c164021c6f 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_ultra_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_flux_pro_1p1_ultra_text_to_image.rs @@ -1,15 +1,17 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_flux_pro_1p1::aspect_ratio_to_artcraft_flux_pro_1p1; +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_flux_pro_1p1_ultra::aspect_ratio_to_artcraft_flux_pro_1p1_ultra; use crate::core::commands::enqueue::generate_error::GenerateError; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize}; use crate::core::events::generation_events::common::GenerationModel; use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::{GenerateFluxPro11UltraTextToImageAspectRatio, GenerateFluxPro11UltraTextToImageNumImages, GenerateFluxPro11UltraTextToImageRequest}; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_ultra_text_to_image::{GenerateFluxPro11UltraTextToImageAspectRatio, GenerateFluxPro11UltraTextToImageNumImages, GenerateFluxPro11UltraTextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; -use log::{error, info}; use idempotency::uuid::generate_random_uuid; -use storyteller_client::endpoints::generate::image::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; +use log::{error, info}; +use storyteller_client::endpoints::generate::image::text::generate_flux_pro_11_ultra_text_to_image::generate_flux_pro_11_ultra_text_to_image; pub async fn handle_artcraft_flux_pro_1p1_ultra_text_to_image( request: &EnqueueTextToImageRequest, @@ -31,14 +33,7 @@ pub async fn handle_artcraft_flux_pro_1p1_ultra_text_to_image( let request = GenerateFluxPro11UltraTextToImageRequest { uuid_idempotency_token, prompt: request.prompt.clone(), - aspect_ratio: request.aspect_ratio - .map(|aspect| match aspect { - // TODO(bt,2025-07-14): Support other aspect ratios. - TextToImageSize::Tall => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineBySixteen, - TextToImageSize::Wide => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeSixteenByNine, - TextToImageSize::Square => GenerateFluxPro11UltraTextToImageAspectRatio::Square, - TextToImageSize::Auto => GenerateFluxPro11UltraTextToImageAspectRatio::Square, - }), + aspect_ratio: get_aspect_ratio(request), num_images: request.number_images .and_then(|num| match num { 1 => Some(GenerateFluxPro11UltraTextToImageNumImages::One), @@ -73,3 +68,24 @@ pub async fn handle_artcraft_flux_pro_1p1_ultra_text_to_image( provider_job_id: Some(job_token.to_string()), }) } + +fn get_aspect_ratio(request: &EnqueueTextToImageRequest) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_flux_pro_1p1_ultra(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect = match aspect_ratio { + TextToImageSize::Tall => GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineBySixteen, + TextToImageSize::Wide => GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeSixteenByNine, + TextToImageSize::Square => GenerateFluxPro11UltraTextToImageAspectRatio::Square, + TextToImageSize::Auto => GenerateFluxPro11UltraTextToImageAspectRatio::Square, + }; + return Some(aspect); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_gpt_image_1_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_gpt_image_1_text_to_image.rs index 4674334ade..460a810207 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_gpt_image_1_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_gpt_image_1_text_to_image.rs @@ -11,7 +11,7 @@ use crate::core::state::provider_priority::ProviderPriorityStore; use crate::services::sora::state::sora_credential_manager::SoraCredentialManager; use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_api_defs::generate::image::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest}; +use artcraft_api_defs::generate::image::text::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; @@ -21,7 +21,7 @@ use openai_sora_client::recipes::simple_image_gen_with_session_auto_renew::{simp use openai_sora_client::requests::image_gen::common::{ImageSize, NumImages}; use std::time::Duration; use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_gpt_image_1_text_to_image::generate_gpt_image_1_text_to_image; +use storyteller_client::endpoints::generate::image::text::generate_gpt_image_1_text_to_image::generate_gpt_image_1_text_to_image; use tauri::AppHandle; pub async fn handle_artcraft_gpt_image_1_text_to_image( diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_pro_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_pro_text_to_image.rs index 09a1096b7a..ce603276c2 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_pro_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_pro_text_to_image.rs @@ -14,8 +14,8 @@ use crate::services::sora::state::sora_credential_manager::SoraCredentialManager use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemini25FlashEditImageNumImages, Gemini25FlashEditImageRequest}; -use artcraft_api_defs::generate::image::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest}; use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::{NanoBananaProMultiFunctionImageGenAspectRatio, NanoBananaProMultiFunctionImageGenImageResolution, NanoBananaProMultiFunctionImageGenNumImages, NanoBananaProMultiFunctionImageGenRequest}; +use artcraft_api_defs::generate::image::text::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_text_to_image.rs index c1a15d2826..e89f918b0d 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_nano_banana_text_to_image.rs @@ -13,9 +13,9 @@ use crate::services::sora::state::sora_credential_manager::SoraCredentialManager use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemini25FlashEditImageNumImages, Gemini25FlashEditImageRequest}; -use artcraft_api_defs::generate::image::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest}; use artcraft_api_defs::generate::image::multi_function::nano_banana_multi_function_image_gen::{NanoBananaMultiFunctionImageGenAspectRatio, NanoBananaMultiFunctionImageGenNumImages, NanoBananaMultiFunctionImageGenRequest}; use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::NanoBananaProMultiFunctionImageGenAspectRatio; +use artcraft_api_defs::generate::image::text::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4_text_to_image.rs index d9a6565ff3..2ece4dd2af 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4_text_to_image.rs @@ -1,5 +1,6 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_seedream_4::aspect_ratio_to_artcraft_seedream_4; use crate::core::commands::enqueue::generate_error::GenerateError; -use crate::core::commands::enqueue::image_edit::enqueue_edit_image_command::{EditImageQuality, EditImageSize}; +use crate::core::commands::enqueue::image_edit::enqueue_edit_image_command::{EditImageQuality, EditImageSize, EnqueueEditImageCommand}; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize}; use crate::core::events::basic_sendable_event_trait::BasicSendableEvent; @@ -37,13 +38,7 @@ pub async fn handle_artcraft_seedream_4_text_to_image( let uuid_idempotency_token = generate_random_uuid(); - let image_size = request.aspect_ratio - .map(|size| match size { - TextToImageSize::Auto => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, - TextToImageSize::Square => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, - TextToImageSize::Tall => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine, - TextToImageSize::Wide => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine, - }); + let image_size = get_aspect_ratio(request); let num_images = match request.number_images { None => None, @@ -98,3 +93,24 @@ pub async fn handle_artcraft_seedream_4_text_to_image( task_type: TaskType::ImageGeneration, }) } + +fn get_aspect_ratio(request: &EnqueueTextToImageRequest) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_seedream_4(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect_ratio = match aspect_ratio { + TextToImageSize::Auto => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, + TextToImageSize::Square => BytedanceSeedreamV4MultiFunctionImageGenImageSize::Square, + TextToImageSize::Tall => BytedanceSeedreamV4MultiFunctionImageGenImageSize::PortraitSixteenNine, + TextToImageSize::Wide => BytedanceSeedreamV4MultiFunctionImageGenImageSize::LandscapeSixteenNine, + }; + return Some(aspect_ratio); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4p5_text_to_image.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4p5_text_to_image.rs index 4564c1bac4..4802812097 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4p5_text_to_image.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/artcraft/handle_artcraft_seedream_4p5_text_to_image.rs @@ -1,5 +1,6 @@ +use crate::core::api_adapters::aspect_ratio::convert::aspect_ratio_to_artcraft_seedream_4p5::aspect_ratio_to_artcraft_seedream_4p5; use crate::core::commands::enqueue::generate_error::GenerateError; -use crate::core::commands::enqueue::image_edit::enqueue_edit_image_command::{EditImageQuality, EditImageSize}; +use crate::core::commands::enqueue::image_edit::enqueue_edit_image_command::{EditImageQuality, EnqueueEditImageCommand}; use crate::core::commands::enqueue::task_enqueue_success::TaskEnqueueSuccess; use crate::core::commands::enqueue::text_to_image::enqueue_text_to_image_command::{EnqueueTextToImageRequest, TextToImageSize}; use crate::core::events::basic_sendable_event_trait::BasicSendableEvent; @@ -37,13 +38,7 @@ pub async fn handle_artcraft_seedream_4p5_text_to_image( let uuid_idempotency_token = generate_random_uuid(); - let image_size = request.aspect_ratio - .map(|size| match size { - TextToImageSize::Auto => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, - TextToImageSize::Square => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, - TextToImageSize::Tall => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine, - TextToImageSize::Wide => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine, - }); + let image_size = get_aspect_ratio(request); let num_images = match request.number_images { None => None, @@ -98,3 +93,24 @@ pub async fn handle_artcraft_seedream_4p5_text_to_image( task_type: TaskType::ImageGeneration, }) } + +fn get_aspect_ratio(request: &EnqueueTextToImageRequest) -> Option { + if let Some(common_aspect_ratio) = request.common_aspect_ratio { + // Handle modern aspect ratio + let aspect = aspect_ratio_to_artcraft_seedream_4p5(common_aspect_ratio); + return Some(aspect); + } + + if let Some(aspect_ratio) = request.aspect_ratio { + // Handle deprecated aspect ratio + let aspect_ratio = match aspect_ratio { + TextToImageSize::Auto => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, + TextToImageSize::Square => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::Square, + TextToImageSize::Tall => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::PortraitSixteenNine, + TextToImageSize::Wide => BytedanceSeedreamV4p5MultiFunctionImageGenImageSize::LandscapeSixteenNine, + }; + return Some(aspect_ratio); + } + + None +} diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/midjourney/handle_midjourney.rs b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/midjourney/handle_midjourney.rs index eb6826ab8a..cbede4534a 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/midjourney/handle_midjourney.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/text_to_image/midjourney/handle_midjourney.rs @@ -15,7 +15,6 @@ use crate::services::midjourney::state::midjourney_credential_manager::Midjourne use crate::services::sora::state::sora_credential_manager::SoraCredentialManager; use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use artcraft_api_defs::generate::image::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest}; use enums::common::generation_provider::GenerationProvider; use enums::tauri::tasks::task_type::TaskType; use idempotency::uuid::generate_random_uuid; @@ -29,8 +28,6 @@ use openai_sora_client::recipes::maybe_upgrade_or_renew_session::maybe_upgrade_o use openai_sora_client::recipes::simple_image_gen_with_session_auto_renew::{simple_image_gen_with_session_auto_renew, SimpleImageGenAutoRenewRequest}; use openai_sora_client::requests::image_gen::common::{ImageSize, NumImages}; use std::time::Duration; -use storyteller_client::endpoints::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; -use storyteller_client::endpoints::generate::image::generate_gpt_image_1_text_to_image::generate_gpt_image_1_text_to_image; use tauri::AppHandle; use tokens::tokens::media_files::MediaFileToken; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs index 9fc40aa2dd..f76c33ae61 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs @@ -1,12 +1,14 @@ use std::sync::Arc; +use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test; use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format; use crate::state::server_state::ServerState; use actix_web::web::Json; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::{GenerateFlux1DevTextToImageAspectRatio, GenerateFlux1DevTextToImageNumImages, GenerateFlux1DevTextToImageRequest, GenerateFlux1DevTextToImageResponse}; +use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::FluxProKontextMaxEditImageNumImages; +use artcraft_api_defs::generate::image::text::generate_flux_1_dev_text_to_image::{GenerateFlux1DevTextToImageAspectRatio, GenerateFlux1DevTextToImageNumImages, GenerateFlux1DevTextToImageRequest, GenerateFlux1DevTextToImageResponse}; use enums::by_table::prompts::prompt_type::PromptType; use enums::common::generation_provider::GenerationProvider; use enums::common::model_type::ModelType; @@ -22,8 +24,6 @@ use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPromptArgs}; use sqlx::Acquire; use utoipa::ToSchema; -use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::FluxProKontextMaxEditImageNumImages; -use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction; /// Flux 1 Dev text to image #[utoipa::path( diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs index 304423cb2f..eeb70fde6b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs @@ -1,12 +1,13 @@ use std::sync::Arc; +use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test; use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format; use crate::state::server_state::ServerState; use actix_web::web::Json; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageAspectRatio, GenerateFlux1SchnellTextToImageNumImages, GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse}; +use artcraft_api_defs::generate::image::text::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageAspectRatio, GenerateFlux1SchnellTextToImageNumImages, GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse}; use enums::by_table::prompts::prompt_type::PromptType; use enums::common::generation_provider::GenerationProvider; use enums::common::model_type::ModelType; @@ -22,8 +23,6 @@ use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPromptArgs}; use sqlx::Acquire; use utoipa::ToSchema; -use artcraft_api_defs::generate::image::generate_flux_1_dev_text_to_image::GenerateFlux1DevTextToImageNumImages; -use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction; /// Flux 1 Schnell text to image #[utoipa::path( diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs index 2bed56389c..03fe9dba7e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs @@ -1,13 +1,15 @@ use std::sync::Arc; +use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test; use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format; use crate::state::server_state::ServerState; use actix_web::web::Json; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageResponse; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::{GenerateFluxPro11TextToImageAspectRatio, GenerateFluxPro11TextToImageNumImages, GenerateFluxPro11TextToImageRequest}; +use artcraft_api_defs::generate::image::text::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageNumImages; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageResponse; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::{GenerateFluxPro11TextToImageAspectRatio, GenerateFluxPro11TextToImageNumImages, GenerateFluxPro11TextToImageRequest}; use enums::by_table::prompts::prompt_type::PromptType; use enums::common::generation_provider::GenerationProvider; use enums::common::model_type::ModelType; @@ -23,8 +25,6 @@ use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPromptArgs}; use sqlx::Acquire; use utoipa::ToSchema; -use artcraft_api_defs::generate::image::generate_flux_1_schnell_text_to_image::GenerateFlux1SchnellTextToImageNumImages; -use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction; /// Flux Pro 1.1 #[utoipa::path( diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_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 index dd52dcc1cb..a23ab8853d 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_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 @@ -7,9 +7,9 @@ use crate::http_server::validations::validate_idempotency_token_format::validate use crate::state::server_state::ServerState; use actix_web::web::Json; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::generate::image::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageNumImages; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageResponse; -use artcraft_api_defs::generate::image::generate_flux_pro_11_ultra_text_to_image::{GenerateFluxPro11UltraTextToImageAspectRatio, GenerateFluxPro11UltraTextToImageNumImages, GenerateFluxPro11UltraTextToImageRequest}; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageNumImages; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageResponse; +use artcraft_api_defs::generate::image::text::generate_flux_pro_11_ultra_text_to_image::{GenerateFluxPro11UltraTextToImageAspectRatio, GenerateFluxPro11UltraTextToImageNumImages, GenerateFluxPro11UltraTextToImageRequest}; use enums::by_table::prompts::prompt_type::PromptType; use enums::common::generation_provider::GenerationProvider; use enums::common::model_type::ModelType; @@ -123,6 +123,10 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler( Some(GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeSixteenByNine) => FluxPro11UltraAspectRatio::LandscapeSixteenByNine, Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitThreeByFour) => FluxPro11UltraAspectRatio::PortraitThreeByFour, Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineBySixteen) => FluxPro11UltraAspectRatio::PortraitNineBySixteen, + Some(GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeThreeByTwo) => FluxPro11UltraAspectRatio::LandscapeThreeByTwo, + Some(GenerateFluxPro11UltraTextToImageAspectRatio::LandscapeTwentyOneByNine) => FluxPro11UltraAspectRatio::LandscapeTwentyOneByNine, + Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitTwoByThree) => FluxPro11UltraAspectRatio::PortraitTwoByThree, + Some(GenerateFluxPro11UltraTextToImageAspectRatio::PortraitNineByTwentyOne) => FluxPro11UltraAspectRatio::PortraitNineByTwentyOne, None => FluxPro11UltraAspectRatio::LandscapeSixteenByNine, // Default }; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs index 32c724527f..30093cf726 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs @@ -8,7 +8,7 @@ use crate::http_server::validations::validate_idempotency_token_format::validate use crate::state::server_state::ServerState; use actix_web::web::Json; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::generate::image::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest, GenerateGptImage1TextToImageResponse}; +use artcraft_api_defs::generate::image::text::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest, GenerateGptImage1TextToImageResponse}; 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; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs index 470942c464..3f595dcf45 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs @@ -7,8 +7,8 @@ use crate::http_server::validations::validate_idempotency_token_format::validate use crate::state::server_state::ServerState; use actix_web::web::Json; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::generate::image::remove_image_background::RemoveImageBackgroundRequest; -use artcraft_api_defs::generate::image::remove_image_background::RemoveImageBackgroundResponse; +use artcraft_api_defs::generate::image::bg_removal::remove_image_background::RemoveImageBackgroundRequest; +use artcraft_api_defs::generate::image::bg_removal::remove_image_background::RemoveImageBackgroundResponse; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums::common::model_type::ModelType; use enums::common::visibility::Visibility; diff --git a/frontend/libs/components/promptbox/src/lib/common/AspectRatioPicker.tsx b/frontend/libs/components/promptbox/src/lib/common/AspectRatioPicker.tsx index 5c5b4701d3..81dfdf159d 100644 --- a/frontend/libs/components/promptbox/src/lib/common/AspectRatioPicker.tsx +++ b/frontend/libs/components/promptbox/src/lib/common/AspectRatioPicker.tsx @@ -92,6 +92,7 @@ const getAspectRatioIcon = (aspectRatio: CommonAspectRatio) : IconDefinition => case CommonAspectRatio.Square: return faSquare; + // Wide case CommonAspectRatio.Wide: case CommonAspectRatio.WideFiveByFour: case CommonAspectRatio.WideFourByThree: @@ -110,8 +111,17 @@ const getAspectRatioIcon = (aspectRatio: CommonAspectRatio) : IconDefinition => case CommonAspectRatio.TallNineBySixteen: case CommonAspectRatio.TallNineByTwentyOne: return faRectangleVertical; // TODO: New FontAwesome 7 has "Tall". + + // With resolution baked in + case CommonAspectRatio.Auto2k: + return faMagicWandSparkles; + case CommonAspectRatio.Auto4k: + return faMagicWandSparkles; + case CommonAspectRatio.SquareHd: + return faSquare; default: + console.error("Unknown aspect ratio in icon mapping:", aspectRatio); return faSquare; // Fail open-ish } } @@ -147,6 +157,13 @@ const getAspectRatioTextLabel = (aspectRatio: CommonAspectRatio) : string => { case CommonAspectRatio.TallNineByTwentyOne: return "9:21 (Tall)"; + // With resolution baked in + case CommonAspectRatio.Auto2k: + return "Auto (2K)"; + case CommonAspectRatio.Auto4k: + return "Auto (4K)"; + case CommonAspectRatio.SquareHd: + return "Square (HD)"; // Semantic cases case CommonAspectRatio.Wide: @@ -155,6 +172,7 @@ const getAspectRatioTextLabel = (aspectRatio: CommonAspectRatio) : string => { return "Tall"; default: + console.error("Unknown aspect ratio:", aspectRatio); return "Square"; // Fail open-ish } } @@ -174,7 +192,11 @@ const popOverLabelToAspectRatio = (label: string, model: ImageModel): CommonAspe case "2:3 (Tall)": return CommonAspectRatio.TallTwoByThree; case "9:16 (Tall)": return CommonAspectRatio.TallNineBySixteen; case "9:21 (Tall)": return CommonAspectRatio.TallNineByTwentyOne; + case "Auto (2K)": return CommonAspectRatio.Auto2k; + case "Auto (4K)": return CommonAspectRatio.Auto4k; + case "Square (HD)": return CommonAspectRatio.SquareHd; } + console.error("Unknown aspect ratio label:", label, "for model:", model.id); // If we can't find it, return the model's default aspect ratio or Square as fallback return model.defaultAspectRatio || CommonAspectRatio.Square; } diff --git a/frontend/libs/model-list/src/lib/classes/properties/CommonAspectRatio.ts b/frontend/libs/model-list/src/lib/classes/properties/CommonAspectRatio.ts index e20af0dfa7..31278128e3 100644 --- a/frontend/libs/model-list/src/lib/classes/properties/CommonAspectRatio.ts +++ b/frontend/libs/model-list/src/lib/classes/properties/CommonAspectRatio.ts @@ -29,4 +29,11 @@ export enum CommonAspectRatio { // Not appropriate for all models to use these values. Wide = "wide", Tall = "tall", + + // Auto values that bake in resolution + Auto2k = "auto_2k", + Auto4k = "auto_4k", + + // Defined aspect ratios that bake in resolution + SquareHd = "square_hd", } diff --git a/frontend/libs/model-list/src/lib/lists/ImageModels.ts b/frontend/libs/model-list/src/lib/lists/ImageModels.ts index b3cce7aaa1..2e9e6a5f24 100644 --- a/frontend/libs/model-list/src/lib/lists/ImageModels.ts +++ b/frontend/libs/model-list/src/lib/lists/ImageModels.ts @@ -50,6 +50,7 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 45000, canChangeAspectRatio: true, + // TODO: Rust client doesn't support aspect ratios for MidJourney yet. }), new ImageModel({ id: "flux_pro_1_1_ultra", @@ -66,6 +67,18 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 35000, canChangeAspectRatio: true, + defaultAspectRatio: CommonAspectRatio.Square, + aspectRatios: [ + CommonAspectRatio.Square, + CommonAspectRatio.WideThreeByTwo, + CommonAspectRatio.WideFourByThree, + CommonAspectRatio.WideSixteenByNine, + CommonAspectRatio.WideTwentyOneByNine, + CommonAspectRatio.TallTwoByThree, + CommonAspectRatio.TallThreeByFour, + CommonAspectRatio.TallNineBySixteen, + CommonAspectRatio.TallNineByTwentyOne, + ], }), new ImageModel({ id: "flux_pro_1_1", @@ -82,6 +95,14 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 10000, canChangeAspectRatio: true, + defaultAspectRatio: CommonAspectRatio.Square, + aspectRatios: [ + CommonAspectRatio.Square, + CommonAspectRatio.WideFourByThree, + CommonAspectRatio.WideSixteenByNine, + CommonAspectRatio.TallThreeByFour, + CommonAspectRatio.TallNineBySixteen, + ], }), new ImageModel({ id: "flux_1_dev", @@ -98,6 +119,15 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 10000, canChangeAspectRatio: true, + defaultAspectRatio: CommonAspectRatio.Square, + aspectRatios: [ + CommonAspectRatio.Square, + CommonAspectRatio.SquareHd, + CommonAspectRatio.WideFourByThree, + CommonAspectRatio.WideSixteenByNine, + CommonAspectRatio.TallThreeByFour, + CommonAspectRatio.TallNineBySixteen, + ], }), new ImageModel({ id: "flux_1_schnell", @@ -114,6 +144,15 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 10000, canChangeAspectRatio: true, + defaultAspectRatio: CommonAspectRatio.Square, + aspectRatios: [ + CommonAspectRatio.Square, + CommonAspectRatio.SquareHd, + CommonAspectRatio.WideFourByThree, + CommonAspectRatio.WideSixteenByNine, + CommonAspectRatio.TallThreeByFour, + CommonAspectRatio.TallNineBySixteen, + ], }), new ImageModel({ id: "nano_banana", @@ -246,6 +285,17 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 60000, canChangeAspectRatio: true, + defaultAspectRatio: CommonAspectRatio.SquareHd, + aspectRatios: [ + CommonAspectRatio.Auto2k, + CommonAspectRatio.Auto4k, + CommonAspectRatio.Square, + CommonAspectRatio.SquareHd, + CommonAspectRatio.WideFourByThree, + CommonAspectRatio.WideSixteenByNine, + CommonAspectRatio.TallThreeByFour, + CommonAspectRatio.TallNineBySixteen, + ] }), new ImageModel({ id: "seedream_4p5", @@ -264,6 +314,17 @@ export const IMAGE_MODELS: ImageModel[] = [ maxImagePromptCount: 6, progressBarTime: 60000, canChangeAspectRatio: true, + defaultAspectRatio: CommonAspectRatio.SquareHd, + aspectRatios: [ + CommonAspectRatio.Auto2k, + CommonAspectRatio.Auto4k, + CommonAspectRatio.Square, + CommonAspectRatio.SquareHd, + CommonAspectRatio.WideFourByThree, + CommonAspectRatio.WideSixteenByNine, + CommonAspectRatio.TallThreeByFour, + CommonAspectRatio.TallNineBySixteen, + ] }), new ImageModel({ id: "flux_pro_kontext_max",