clamp instead, meh

This commit is contained in:
Brandon Thomas committed 2026-05-27 18:28:51 -04:00
1 parent b631c1da95
commit 96235cda9f
1 file changed
+14 -20
@@ -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));
}