Skip to main content

tripo_api/tasks/
texture_model.rs

1//! `texture_model` task variant.
2//!
3//! Wire-format quirk: `text_prompt` / `image_prompt` / `style_image` are
4//! rolled up into a nested `texture_prompt` object, sent only when at least
5//! one of the three is present.
6
7use serde::{Deserialize, Serialize};
8
9use crate::compress::CompressionMode;
10use crate::enums::{TextureAlignment, TextureQuality};
11use crate::image::ImageInput;
12
13/// Sub-object carrying the three texture-prompt inputs.
14#[derive(Debug, Clone, Serialize, Deserialize, Default)]
15#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16#[serde(deny_unknown_fields, default)]
17pub struct TexturePrompt {
18    /// Text prompt.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub text: Option<String>,
21    /// Reference image (uploaded/URL/token).
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub image: Option<ImageInput>,
24    /// Style image (uploaded/URL/token).
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub style_image: Option<ImageInput>,
27}
28
29impl TexturePrompt {
30    pub(crate) fn is_empty(&self) -> bool {
31        self.text.is_none() && self.image.is_none() && self.style_image.is_none()
32    }
33}
34
35/// Request body for `texture_model`. Wire `type`: `texture_model`.
36#[derive(Debug, Clone, Serialize, Deserialize, Default)]
37#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38#[serde(deny_unknown_fields)]
39pub struct TextureModelRequest {
40    /// Source task id.
41    pub original_model_task_id: String,
42    /// Nested prompt object; omitted when all sub-fields are None.
43    #[serde(default, skip_serializing_if = "TexturePrompt::is_empty")]
44    pub texture_prompt: TexturePrompt,
45    /// Model version.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub model_version: Option<String>,
48    /// Texture.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub texture: Option<bool>,
51    /// PBR.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub pbr: Option<bool>,
54    /// Model seed.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub model_seed: Option<i32>,
57    /// Texture seed.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub texture_seed: Option<i32>,
60    /// Texture quality.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub texture_quality: Option<TextureQuality>,
63    /// Texture alignment strategy.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub texture_alignment: Option<TextureAlignment>,
66    /// Restrict to named parts.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub part_names: Option<Vec<String>>,
69    /// Geometry compression.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub compress: Option<CompressionMode>,
72    /// Bake textures.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub bake: Option<bool>,
75}