diff --git a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_image_v2/providers/fal/flux_2_lora_angles/build.rs b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_image_v2/providers/fal/flux_2_lora_angles/build.rs index 8c66b15bf5..7537a716cb 100644 --- a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_image_v2/providers/fal/flux_2_lora_angles/build.rs +++ b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_image_v2/providers/fal/flux_2_lora_angles/build.rs @@ -29,8 +29,8 @@ pub fn build_fal_flux_2_lora_angles( let request = EnqueueFlux2LoraEditImageAngleRequest { image_urls, - horizontal_angle: builder.horizontal_angle.map(wrap_angle_degrees), - vertical_angle: builder.vertical_angle.map(wrap_angle_degrees), + horizontal_angle: builder.horizontal_angle, + vertical_angle: builder.vertical_angle.map(|v| v.clamp(0.0, 60.0)), zoom: builder.zoom, num_images: Some(num_images), image_size, @@ -112,13 +112,6 @@ fn plan_image_size( } } -/// Wrap an angle in degrees into the half-open interval [0, 360). -/// Fal's flux-2-lora-gallery endpoint rejects negative angles (schema requires `ge: 0.0`), -/// but treats the angle as a position on a circle, so -30° is equivalent to 330°. -fn wrap_angle_degrees(v: f64) -> f64 { - ((v % 360.0) + 360.0) % 360.0 -} - #[cfg(test)] mod tests { use super::*; @@ -155,34 +148,35 @@ mod tests { #[test] fn passes_through_camera_params() { - let req = unwrap_request(build_fal_flux_2_lora_angles(base())); + let builder = GenerateImageRequestBuilder { + vertical_angle: Some(15.0), + ..base() + }; + let req = unwrap_request(build_fal_flux_2_lora_angles(builder)); assert_eq!(req.horizontal_angle, Some(45.0)); - // base() sets vertical_angle to -15.0; wrap_angle_degrees rotates it around the circle to 345.0 - assert_eq!(req.vertical_angle, Some(345.0)); + assert_eq!(req.vertical_angle, Some(15.0)); assert_eq!(req.zoom, Some(2.0)); } #[test] - fn negative_vertical_angle_wraps_around_circle() { + fn negative_vertical_angle_clamps_to_zero() { + // Fal's flux-2-lora-gallery rejects vertical_angle < 0 (schema requires ge: 0.0). let builder = GenerateImageRequestBuilder { - horizontal_angle: Some(315.0), vertical_angle: Some(-30.0), ..base() }; let req = unwrap_request(build_fal_flux_2_lora_angles(builder)); - assert_eq!(req.horizontal_angle, Some(315.0)); - assert_eq!(req.vertical_angle, Some(330.0)); + assert_eq!(req.vertical_angle, Some(0.0)); } #[test] - fn angles_at_or_past_360_wrap_back_to_zero_range() { + fn vertical_angle_above_sixty_clamps_to_sixty() { + // Fal's flux-2-lora-gallery rejects vertical_angle > 60 (schema requires le: 60.0). let builder = GenerateImageRequestBuilder { - horizontal_angle: Some(360.0), - vertical_angle: Some(420.0), + vertical_angle: Some(90.0), ..base() }; let req = unwrap_request(build_fal_flux_2_lora_angles(builder)); - assert_eq!(req.horizontal_angle, Some(0.0)); assert_eq!(req.vertical_angle, Some(60.0)); }