Skip to main content

tripo_api/tasks/
image_to_model.rs

1//! `image_to_model` task variant.
2
3use serde::{Deserialize, Serialize};
4
5use crate::compress::CompressionMode;
6use crate::enums::{GeometryQuality, Orientation, TextureAlignment, TextureQuality};
7use crate::error::Result;
8use crate::image::ImageInput;
9
10/// Request body for `image_to_model`. Wire `type`: `image_to_model`.
11#[derive(Debug, Clone, Serialize, Deserialize)]
12#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
13#[serde(deny_unknown_fields)]
14pub struct ImageToModelRequest {
15    /// The input image — on the wire this is serialized as `file`, not `image`.
16    #[serde(rename = "file")]
17    pub image: ImageInput,
18    /// Model version string; see `versions::text_image`.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub model_version: Option<String>,
21    /// Target face count.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub face_limit: Option<i32>,
24    /// Generate a texture.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub texture: Option<bool>,
27    /// PBR shading.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub pbr: Option<bool>,
30    /// Seed for model generation.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub model_seed: Option<i32>,
33    /// Seed for texture generation.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub texture_seed: Option<i32>,
36    /// Texture quality preset.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub texture_quality: Option<TextureQuality>,
39    /// Geometry quality preset.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub geometry_quality: Option<GeometryQuality>,
42    /// Texture alignment strategy.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub texture_alignment: Option<TextureAlignment>,
45    /// Auto-size the output mesh.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub auto_size: Option<bool>,
48    /// Output orientation hint.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub orientation: Option<Orientation>,
51    /// Produce a quad mesh.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub quad: Option<bool>,
54    /// Geometry compression option.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub compress: Option<CompressionMode>,
57    /// Emit part decomposition.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub generate_parts: Option<bool>,
60    /// Route through smart-lowpoly.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub smart_low_poly: Option<bool>,
63}
64
65impl ImageToModelRequest {
66    pub(crate) fn validate(&self) -> Result<()> {
67        super::validate_p1_params(
68            self.model_version.as_deref(),
69            self.quad,
70            self.smart_low_poly,
71            self.generate_parts,
72            self.geometry_quality.as_ref(),
73        )
74    }
75}