From d59ea9825a5496adbe28b749bdf76d62cb654bc6 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 19 Mar 2026 00:38:44 -0400 Subject: [PATCH] impl fal http requests for text-to-image webhooks --- .../text/http_flux_1_dev_text_to_image.rs | 47 ++++++++++++++++ .../text/http_flux_1_schnell_text_to_image.rs | 44 +++++++++++++++ .../text/http_flux_pro_11_text_to_image.rs | 50 +++++++++++++++++ .../http_flux_pro_11_ultra_text_to_image.rs | 55 +++++++++++++++++++ .../http_gemini_25_flash_text_to_image.rs | 38 +++++++++++++ .../text/http_gpt_image_1_text_to_image.rs | 30 ++++++++++ .../text/http_gpt_image_1p5_text_to_image.rs | 45 +++++++++++++++ .../http_nano_banana_pro_text_to_image.rs | 43 +++++++++++++++ .../text/http_seedream_4_text_to_image.rs | 47 ++++++++++++++++ .../text/http_seedream_4p5_text_to_image.rs | 45 +++++++++++++++ .../src/requests/http/image/text/mod.rs | 10 ++++ ...dance_seedream_v4_text_to_image_webhook.rs | 7 +-- ...nce_seedream_v4p5_text_to_image_webhook.rs | 6 +- ...nqueue_flux_1_dev_text_to_image_webhook.rs | 22 ++++---- ...ue_flux_1_schnell_text_to_image_webhook.rs | 22 ++++---- ...queue_flux_pro_11_text_to_image_webhook.rs | 20 +++---- ...flux_pro_11_ultra_text_to_image_webhook.rs | 26 ++++----- ...e_gemini_25_flash_text_to_image_webhook.rs | 3 +- ...queue_gpt_image_1_text_to_image_webhook.rs | 6 +- ...eue_gpt_image_1p5_text_to_image_webhook.rs | 2 +- ...e_nano_banana_pro_text_to_image_webhook.rs | 2 +- 21 files changed, 509 insertions(+), 61 deletions(-) create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_dev_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_schnell_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_ultra_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_gemini_25_flash_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1p5_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_nano_banana_pro_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4_text_to_image.rs create mode 100644 crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4p5_text_to_image.rs diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_dev_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_dev_text_to_image.rs new file mode 100644 index 0000000000..3fe736b843 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_dev_text_to_image.rs @@ -0,0 +1,47 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct Flux1DevTextToImageInput { + pub prompt: String, + + /// Options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9 + #[serde(skip_serializing_if = "Option::is_none")] + pub image_size: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub seed: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub guidance_scale: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub num_inference_steps: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub enable_safety_checker: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub sync_mode: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Flux1DevTextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Flux1DevTextToImageOutput { + pub images: Vec, +} + +pub fn flux_1_dev_text_to_image( + params: Flux1DevTextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/flux/dev", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_schnell_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_schnell_text_to_image.rs new file mode 100644 index 0000000000..b064b47548 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_1_schnell_text_to_image.rs @@ -0,0 +1,44 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct Flux1SchnellTextToImageInput { + pub prompt: String, + + /// Options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9 + #[serde(skip_serializing_if = "Option::is_none")] + pub image_size: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub seed: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub num_inference_steps: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub enable_safety_checker: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub sync_mode: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Flux1SchnellTextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Flux1SchnellTextToImageOutput { + pub images: Vec, +} + +pub fn flux_1_schnell_text_to_image( + params: Flux1SchnellTextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/flux/schnell", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_text_to_image.rs new file mode 100644 index 0000000000..a22a937242 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_text_to_image.rs @@ -0,0 +1,50 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct FluxPro11TextToImageInput { + pub prompt: String, + + /// Options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9 + #[serde(skip_serializing_if = "Option::is_none")] + pub image_size: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub seed: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub enable_safety_checker: Option, + + /// "1" (most strict) to "5" (most permissive) + #[serde(skip_serializing_if = "Option::is_none")] + pub safety_tolerance: Option, + + /// "png" or "jpeg" + /// Default: "jpeg" + #[serde(skip_serializing_if = "Option::is_none")] + pub output_format: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub sync_mode: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct FluxPro11TextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct FluxPro11TextToImageOutput { + pub images: Vec, +} + +pub fn flux_pro_11_text_to_image( + params: FluxPro11TextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/flux-pro/v1.1", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_ultra_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_ultra_text_to_image.rs new file mode 100644 index 0000000000..28ab706da1 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_flux_pro_11_ultra_text_to_image.rs @@ -0,0 +1,55 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct FluxPro11UltraTextToImageInput { + pub prompt: String, + + /// Options: 21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21 + #[serde(skip_serializing_if = "Option::is_none")] + pub aspect_ratio: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub seed: Option, + + /// Generate less processed, more natural-looking images. + /// Default: false + #[serde(skip_serializing_if = "Option::is_none")] + pub raw: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub enable_safety_checker: Option, + + /// "1" (most strict) to "5" (most permissive) + #[serde(skip_serializing_if = "Option::is_none")] + pub safety_tolerance: Option, + + /// "png" or "jpeg" + /// Default: "jpeg" + #[serde(skip_serializing_if = "Option::is_none")] + pub output_format: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub sync_mode: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct FluxPro11UltraTextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct FluxPro11UltraTextToImageOutput { + pub images: Vec, +} + +pub fn flux_pro_11_ultra_text_to_image( + params: FluxPro11UltraTextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/flux-pro/v1.1-ultra", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_gemini_25_flash_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_gemini_25_flash_text_to_image.rs new file mode 100644 index 0000000000..f853720371 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_gemini_25_flash_text_to_image.rs @@ -0,0 +1,38 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct Gemini25FlashTextToImageInput { + pub prompt: String, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + /// "jpeg" or "png" + /// Default: "png" + #[serde(skip_serializing_if = "Option::is_none")] + pub output_format: Option, + + /// Options: 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16 + /// Default: "1:1" + #[serde(skip_serializing_if = "Option::is_none")] + pub aspect_ratio: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Gemini25FlashTextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Gemini25FlashTextToImageOutput { + pub images: Vec, +} + +pub fn gemini_25_flash_text_to_image( + params: Gemini25FlashTextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/gemini-25-flash-image", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1_text_to_image.rs new file mode 100644 index 0000000000..708c318945 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1_text_to_image.rs @@ -0,0 +1,30 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct GptImage1TextToImageInput { + pub prompt: String, + + /// "auto", "1024x1024", "1536x1024", "1024x1536" + pub image_size: String, + + /// 1 - 4 + pub num_images: u8, + + /// "auto", "low", "medium", "high" + pub quality: String, + + /// BYOK - caller supplies their own OpenAI API key + pub openai_api_key: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct GptImage1TextToImageOutput { + // Response fields parsed elsewhere +} + +pub fn gpt_image_1_text_to_image( + params: GptImage1TextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/gpt-image-1/text-to-image/byok", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1p5_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1p5_text_to_image.rs new file mode 100644 index 0000000000..ac307ec796 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_gpt_image_1p5_text_to_image.rs @@ -0,0 +1,45 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct GptImage1p5TextToImageInput { + pub prompt: String, + + /// "auto", "1024x1024", "1536x1024", "1024x1536" + #[serde(skip_serializing_if = "Option::is_none")] + pub image_size: Option, + + /// "auto", "transparent", "opaque" + #[serde(skip_serializing_if = "Option::is_none")] + pub background: Option, + + /// "low", "medium", "high" + #[serde(skip_serializing_if = "Option::is_none")] + pub quality: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + /// "jpeg", "png", "webp" + /// Default: "png" + #[serde(skip_serializing_if = "Option::is_none")] + pub output_format: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct GptImage1p5TextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct GptImage1p5TextToImageOutput { + pub images: Vec, +} + +pub fn gpt_image_1p5_text_to_image( + params: GptImage1p5TextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/gpt-image-1.5", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_nano_banana_pro_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_nano_banana_pro_text_to_image.rs new file mode 100644 index 0000000000..4b984734ba --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_nano_banana_pro_text_to_image.rs @@ -0,0 +1,43 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct NanoBananaProTextToImageInput { + pub prompt: String, + + /// Options: auto, 21:9, 16:9, 3:2, 4:3, 5:4, 1:1, 4:5, 3:4, 2:3, 9:16 + /// Default: "auto" + #[serde(skip_serializing_if = "Option::is_none")] + pub aspect_ratio: Option, + + /// "1K", "2K", "4K" + /// Default: "1K" + #[serde(skip_serializing_if = "Option::is_none")] + pub resolution: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + /// "jpeg", "png", "webp" + /// Default: "png" + #[serde(skip_serializing_if = "Option::is_none")] + pub output_format: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct NanoBananaProTextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct NanoBananaProTextToImageOutput { + pub images: Vec, +} + +pub fn nano_banana_pro_text_to_image( + params: NanoBananaProTextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/nano-banana-pro", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4_text_to_image.rs new file mode 100644 index 0000000000..e54c016f46 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4_text_to_image.rs @@ -0,0 +1,47 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct SeedreamV4TextToImageInput { + pub prompt: String, + + /// Options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, auto, auto_2K, auto_4K + /// Default: "auto_2K" + #[serde(skip_serializing_if = "Option::is_none")] + pub image_size: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub max_images: Option, + + /// Enum: "standard", "fast" + /// Default: "standard" + #[serde(skip_serializing_if = "Option::is_none")] + pub enhance_prompt_mode: Option, + + /// Default: true + #[serde(skip_serializing_if = "Option::is_none")] + pub enable_safety_checker: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct SeedreamV4TextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct SeedreamV4TextToImageOutput { + pub images: Vec, +} + +pub fn seedream_4_text_to_image( + params: SeedreamV4TextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/bytedance/seedream/v4/text-to-image", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4p5_text_to_image.rs b/crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4p5_text_to_image.rs new file mode 100644 index 0000000000..441b2cde73 --- /dev/null +++ b/crates/api_clients/fal_client/src/requests/http/image/text/http_seedream_4p5_text_to_image.rs @@ -0,0 +1,45 @@ +use fal::request::FalRequest; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Default)] +pub struct SeedreamV4p5TextToImageInput { + pub prompt: String, + + /// Options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, auto_2K, auto_4K + /// Default: "auto_2K" + #[serde(skip_serializing_if = "Option::is_none")] + pub image_size: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub num_images: Option, + + /// 1 - 4 + /// Default: 1 + #[serde(skip_serializing_if = "Option::is_none")] + pub max_images: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub seed: Option, + + /// Default: true + #[serde(skip_serializing_if = "Option::is_none")] + pub enable_safety_checker: Option, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct SeedreamV4p5TextToImageFile { + pub url: String, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct SeedreamV4p5TextToImageOutput { + pub images: Vec, +} + +pub fn seedream_4p5_text_to_image( + params: SeedreamV4p5TextToImageInput, +) -> FalRequest { + FalRequest::new("fal-ai/bytedance/seedream/v4.5/text-to-image", params) +} diff --git a/crates/api_clients/fal_client/src/requests/http/image/text/mod.rs b/crates/api_clients/fal_client/src/requests/http/image/text/mod.rs index becab05e72..2a6471ddad 100644 --- a/crates/api_clients/fal_client/src/requests/http/image/text/mod.rs +++ b/crates/api_clients/fal_client/src/requests/http/image/text/mod.rs @@ -1,2 +1,12 @@ +pub mod http_flux_1_dev_text_to_image; +pub mod http_flux_1_schnell_text_to_image; +pub mod http_flux_pro_11_text_to_image; +pub mod http_flux_pro_11_ultra_text_to_image; +pub mod http_gemini_25_flash_text_to_image; +pub mod http_gpt_image_1_text_to_image; +pub mod http_gpt_image_1p5_text_to_image; pub mod http_nano_banana_2_text_to_image; +pub mod http_nano_banana_pro_text_to_image; +pub mod http_seedream_4_text_to_image; +pub mod http_seedream_4p5_text_to_image; pub mod http_seedream_5_text_to_image; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4_text_to_image_webhook.rs index c859f4e7b4..cc1effb230 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4_text_to_image_webhook.rs @@ -2,8 +2,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents}; -use fal::endpoints::fal_ai::bytedance::seedream::bytedance_seedream_v4_text_to_image::BytedanceSeedreamV4TextToImageInput; -use fal::prelude::fal_ai::bytedance::seedream::bytedance_seedream_v4_text_to_image::bytedance_seedream_v4_text_to_image; +use crate::requests::http::image::text::http_seedream_4_text_to_image::{seedream_4_text_to_image, SeedreamV4TextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; @@ -106,7 +105,7 @@ pub async fn enqueue_bytedance_seedream_v4_text_to_image_webhook( }) .map(|resolution| resolution.to_string()); - let request = BytedanceSeedreamV4TextToImageInput { + let request = SeedreamV4TextToImageInput { prompt: args.prompt.to_string(), // Optionals num_images, @@ -117,7 +116,7 @@ pub async fn enqueue_bytedance_seedream_v4_text_to_image_webhook( enable_safety_checker: Some(false), }; - let result = bytedance_seedream_v4_text_to_image(request) + let result = seedream_4_text_to_image(request) .with_api_key(&args.api_key.0) .queue_webhook(args.webhook_url) .await; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4p5_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4p5_text_to_image_webhook.rs index a5cf2f6c3c..dc17d94424 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4p5_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_bytedance_seedream_v4p5_text_to_image_webhook.rs @@ -1,7 +1,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; -use fal::endpoints::fal_ai::bytedance::seedream::bytedance_seedream_v4p5_text_to_image::{bytedance_seedream_v4p5_text_to_image, BytedanceSeedreamV4p5TextToImageInput}; +use crate::requests::http::image::text::http_seedream_4p5_text_to_image::{seedream_4p5_text_to_image, SeedreamV4p5TextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents}; @@ -104,7 +104,7 @@ pub async fn enqueue_bytedance_seedream_v4p5_text_to_image_webhook( }) .map(|resolution| resolution.to_string()); - let request = BytedanceSeedreamV4p5TextToImageInput { + let request = SeedreamV4p5TextToImageInput { prompt: args.prompt.to_string(), // Optionals num_images, @@ -115,7 +115,7 @@ pub async fn enqueue_bytedance_seedream_v4p5_text_to_image_webhook( seed: None, }; - let result = bytedance_seedream_v4p5_text_to_image(request) + let result = seedream_4p5_text_to_image(request) .with_api_key(&args.api_key.0) .queue_webhook(args.webhook_url) .await; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_dev_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_dev_text_to_image_webhook.rs index 50e6e796b0..d10a9a6866 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_dev_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_dev_text_to_image_webhook.rs @@ -1,9 +1,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; -use fal::endpoints::fal_ai::flux::dev::dev; -use fal::endpoints::fal_ai::flux::dev::DevTextToImageInput; -use fal::prelude::fal_ai::flux::dev::ImageSizeProperty; +use crate::requests::http::image::text::http_flux_1_dev_text_to_image::{flux_1_dev_text_to_image, Flux1DevTextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; @@ -46,18 +44,18 @@ pub async fn enqueue_flux_1_dev_text_to_image_webhook( }; let image_size = match args.aspect_ratio { - Flux1DevAspectRatio::Square => ImageSizeProperty::Square, - Flux1DevAspectRatio::SquareHd => ImageSizeProperty::SquareHd, - Flux1DevAspectRatio::LandscapeFourByThree => ImageSizeProperty::Landscape43, - Flux1DevAspectRatio::LandscapeSixteenByNine => ImageSizeProperty::Landscape169, - Flux1DevAspectRatio::PortraitThreeByFour => ImageSizeProperty::Portrait43, - Flux1DevAspectRatio::PortraitNineBySixteen => ImageSizeProperty::Portrait169, + Flux1DevAspectRatio::Square => "square", + Flux1DevAspectRatio::SquareHd => "square_hd", + Flux1DevAspectRatio::LandscapeFourByThree => "landscape_4_3", + Flux1DevAspectRatio::LandscapeSixteenByNine => "landscape_16_9", + Flux1DevAspectRatio::PortraitThreeByFour => "portrait_4_3", + Flux1DevAspectRatio::PortraitNineBySixteen => "portrait_16_9", }; - let request = DevTextToImageInput { + let request = Flux1DevTextToImageInput { prompt: args.prompt.to_string(), num_images: Some(num_images), - image_size: Some(image_size), + image_size: Some(image_size.to_string()), // Maybe abstract enable_safety_checker: Some(false), // Maybe expose @@ -68,7 +66,7 @@ pub async fn enqueue_flux_1_dev_text_to_image_webhook( sync_mode: None, // Synchronous / slow }; - let result = dev(request) + let result = flux_1_dev_text_to_image(request) .with_api_key(&args.api_key.0) .queue_webhook(args.webhook_url) .await; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_schnell_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_schnell_text_to_image_webhook.rs index ffde8e1a95..eb3f37ff70 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_schnell_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_1_schnell_text_to_image_webhook.rs @@ -1,9 +1,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; -use fal::endpoints::fal_ai::flux::schnell::schnell; -use fal::endpoints::fal_ai::flux::schnell::SchnellTextToImageInput; -use fal::prelude::fal_ai::flux::schnell::ImageSizeProperty; +use crate::requests::http::image::text::http_flux_1_schnell_text_to_image::{flux_1_schnell_text_to_image, Flux1SchnellTextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; @@ -46,18 +44,18 @@ pub async fn enqueue_flux_1_schnell_text_to_image_webhook( }; let image_size = match args.aspect_ratio { - Flux1SchnellAspectRatio::Square => ImageSizeProperty::Square, - Flux1SchnellAspectRatio::SquareHd => ImageSizeProperty::SquareHd, - Flux1SchnellAspectRatio::LandscapeFourByThree => ImageSizeProperty::Landscape43, - Flux1SchnellAspectRatio::LandscapeSixteenByNine => ImageSizeProperty::Landscape169, - Flux1SchnellAspectRatio::PortraitThreeByFour => ImageSizeProperty::Portrait43, - Flux1SchnellAspectRatio::PortraitNineBySixteen => ImageSizeProperty::Portrait169, + Flux1SchnellAspectRatio::Square => "square", + Flux1SchnellAspectRatio::SquareHd => "square_hd", + Flux1SchnellAspectRatio::LandscapeFourByThree => "landscape_4_3", + Flux1SchnellAspectRatio::LandscapeSixteenByNine => "landscape_16_9", + Flux1SchnellAspectRatio::PortraitThreeByFour => "portrait_4_3", + Flux1SchnellAspectRatio::PortraitNineBySixteen => "portrait_16_9", }; - let request = SchnellTextToImageInput { + let request = Flux1SchnellTextToImageInput { prompt: args.prompt.to_string(), num_images: Some(num_images), - image_size: Some(image_size), + image_size: Some(image_size.to_string()), // Maybe abstract enable_safety_checker: Some(false), // Maybe expose @@ -67,7 +65,7 @@ pub async fn enqueue_flux_1_schnell_text_to_image_webhook( sync_mode: None, // Synchronous / slow }; - let result = schnell(request) + let result = flux_1_schnell_text_to_image(request) .with_api_key(&args.api_key.0) .queue_webhook(args.webhook_url) .await; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_text_to_image_webhook.rs index c6dda0e383..1ddc7cc08c 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_text_to_image_webhook.rs @@ -2,7 +2,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents}; -use fal::endpoints::fal_ai::flux_pro::v1_1::{v1_1, FluxProPlusTextToImageInput, ImageSizeProperty}; +use crate::requests::http::image::text::http_flux_pro_11_text_to_image::{flux_pro_11_text_to_image, FluxPro11TextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; @@ -62,18 +62,18 @@ pub async fn enqueue_flux_pro_11_text_to_image_webhook( }; let image_size = match args.aspect_ratio { - FluxPro11AspectRatio::Square => ImageSizeProperty::Square, - FluxPro11AspectRatio::SquareHd => ImageSizeProperty::SquareHd, - FluxPro11AspectRatio::LandscapeFourByThree => ImageSizeProperty::Landscape43, - FluxPro11AspectRatio::LandscapeSixteenByNine => ImageSizeProperty::Landscape169, - FluxPro11AspectRatio::PortraitThreeByFour => ImageSizeProperty::Portrait43, - FluxPro11AspectRatio::PortraitNineBySixteen => ImageSizeProperty::Portrait169, + FluxPro11AspectRatio::Square => "square", + FluxPro11AspectRatio::SquareHd => "square_hd", + FluxPro11AspectRatio::LandscapeFourByThree => "landscape_4_3", + FluxPro11AspectRatio::LandscapeSixteenByNine => "landscape_16_9", + FluxPro11AspectRatio::PortraitThreeByFour => "portrait_4_3", + FluxPro11AspectRatio::PortraitNineBySixteen => "portrait_16_9", }; - let request = FluxProPlusTextToImageInput { + let request = FluxPro11TextToImageInput { prompt: args.prompt.to_string(), num_images: Some(num_images), - image_size: Some(image_size), + image_size: Some(image_size.to_string()), // Maybe expose seed: None, // Maybe abstract @@ -84,7 +84,7 @@ pub async fn enqueue_flux_pro_11_text_to_image_webhook( sync_mode: None, // Synchronous / slow }; - let result = v1_1(request) + let result = flux_pro_11_text_to_image(request) .with_api_key(&args.api_key.0) .queue_webhook(args.webhook_url) .await; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs index fd6eabd095..c8ae663e71 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_flux_pro_11_ultra_text_to_image_webhook.rs @@ -2,7 +2,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents}; -use fal::endpoints::fal_ai::flux_pro::v1_1_ultra::{v1_1_ultra, AspectRatioProperty, FluxProUltraTextToImageInput}; +use crate::requests::http::image::text::http_flux_pro_11_ultra_text_to_image::{flux_pro_11_ultra_text_to_image, FluxPro11UltraTextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; @@ -64,21 +64,21 @@ 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, + FluxPro11UltraAspectRatio::Square => "1:1", + FluxPro11UltraAspectRatio::LandscapeThreeByTwo => "3:2", + FluxPro11UltraAspectRatio::LandscapeFourByThree => "4:3", + FluxPro11UltraAspectRatio::LandscapeSixteenByNine => "16:9", + FluxPro11UltraAspectRatio::LandscapeTwentyOneByNine => "21:9", + FluxPro11UltraAspectRatio::PortraitTwoByThree => "2:3", + FluxPro11UltraAspectRatio::PortraitThreeByFour => "3:4", + FluxPro11UltraAspectRatio::PortraitNineBySixteen => "9:16", + FluxPro11UltraAspectRatio::PortraitNineByTwentyOne => "9:21", }; - let request = FluxProUltraTextToImageInput { + let request = FluxPro11UltraTextToImageInput { prompt: args.prompt.to_string(), num_images: Some(num_images), - aspect_ratio: Some(aspect_ratio), + aspect_ratio: Some(aspect_ratio.to_string()), // Maybe expose seed: None, raw: Some(true), // Generate less processed, more natural-looking images. Default is false. @@ -90,7 +90,7 @@ pub async fn enqueue_flux_pro_11_ultra_text_to_image_webhook( sync_mode: None, // Synchronous / slow }; - let result = v1_1_ultra(request) + let result = flux_pro_11_ultra_text_to_image(request) .with_api_key(&args.api_key.0) .queue_webhook(args.webhook_url) .await; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gemini_25_flash_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gemini_25_flash_text_to_image_webhook.rs index dd38395f04..6a78374dad 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gemini_25_flash_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gemini_25_flash_text_to_image_webhook.rs @@ -1,8 +1,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; -use fal::prelude::fal_ai::gemini_25_flash_image::text_to_image::gemini_25_flash_text_to_image; -use fal::prelude::fal_ai::gemini_25_flash_image::text_to_image::Gemini25FlashTextToImageInput; +use crate::requests::http::image::text::http_gemini_25_flash_text_to_image::{gemini_25_flash_text_to_image, Gemini25FlashTextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents}; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1_text_to_image_webhook.rs index 5e57018981..0c0635a495 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1_text_to_image_webhook.rs @@ -3,7 +3,7 @@ use crate::creds::open_ai_api_key::OpenAiApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents}; -use fal::prelude::fal_ai::gpt_image_1::edit_image::byok::{gpt_text_to_image, GptTextToImageRequest}; +use crate::requests::http::image::text::http_gpt_image_1_text_to_image::{gpt_image_1_text_to_image, GptImage1TextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; @@ -95,7 +95,7 @@ pub async fn enqueue_gpt_image_1_text_to_image_webhook( GptTextToImageNumImages::Four => 4, }; - let request = GptTextToImageRequest { + let request = GptImage1TextToImageInput { prompt: args.prompt.to_string(), image_size: image_size.to_string(), num_images, @@ -103,7 +103,7 @@ pub async fn enqueue_gpt_image_1_text_to_image_webhook( openai_api_key: args.openai_api_key.0.to_string(), }; - let result = gpt_text_to_image(request) + let result = gpt_image_1_text_to_image(request) .with_api_key(&args.api_key.0) .queue_webhook(args.webhook_url) .await; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1p5_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1p5_text_to_image_webhook.rs index bd831cc2c3..9766e6f27f 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1p5_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_gpt_image_1p5_text_to_image_webhook.rs @@ -2,7 +2,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents}; -use fal::endpoints::fal_ai::gpt_image::gpt_image_1p5_text_to_image::{gpt_image_1p5_text_to_image, GptImage1p5TextToImageInput}; +use crate::requests::http::image::text::http_gpt_image_1p5_text_to_image::{gpt_image_1p5_text_to_image, GptImage1p5TextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; diff --git a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_nano_banana_pro_text_to_image_webhook.rs b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_nano_banana_pro_text_to_image_webhook.rs index 076aec6b37..a38e84e381 100644 --- a/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_nano_banana_pro_text_to_image_webhook.rs +++ b/crates/api_clients/fal_client/src/requests/webhook/image/text/enqueue_nano_banana_pro_text_to_image_webhook.rs @@ -1,7 +1,7 @@ use crate::creds::fal_api_key::FalApiKey; use crate::error::classify_fal_error::classify_fal_error; use crate::error::fal_error_plus::FalErrorPlus; -use fal::endpoints::fal_ai::nano_banana_pro::nano_banana_pro_text_to_image::{nano_banana_pro_text_to_image, NanoBananaProTextToImageInput}; +use crate::requests::http::image::text::http_nano_banana_pro_text_to_image::{nano_banana_pro_text_to_image, NanoBananaProTextToImageInput}; use fal::webhook::WebhookResponse; use reqwest::IntoUrl; use crate::requests::traits::fal_request_cost_calculator_trait::{FalRequestCostCalculator, UsdCents};