Skip to main content

tripo_api/tasks/
text_to_model.rs

1//! `text_to_model` task variant.
2
3use serde::{Deserialize, Serialize};
4
5use crate::compress::CompressionMode;
6use crate::enums::{GeometryQuality, TextureQuality};
7use crate::error::Result;
8
9/// Request body for `text_to_model`. Wire `type`: `text_to_model`.
10///
11/// See the Python SDK `Client.text_to_model` for the authoritative field list.
12#[derive(Debug, Clone, Serialize, Deserialize, Default)]
13#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14#[serde(deny_unknown_fields)]
15pub struct TextToModelRequest {
16    /// Prompt text. Required.
17    pub prompt: String,
18    /// Negative prompt (things to avoid).
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub negative_prompt: Option<String>,
21    /// Model version string; see `versions::text_image`.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub model_version: Option<String>,
24    /// Target face count.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub face_limit: Option<i32>,
27    /// Generate a texture? (default true server-side)
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub texture: Option<bool>,
30    /// Physically-based shading?
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub pbr: Option<bool>,
33    /// Seed for the initial reference image.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub image_seed: Option<i32>,
36    /// Seed for the model generation.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub model_seed: Option<i32>,
39    /// Seed for texture generation.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub texture_seed: Option<i32>,
42    /// Texture quality preset.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub texture_quality: Option<TextureQuality>,
45    /// Geometry quality preset.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub geometry_quality: Option<GeometryQuality>,
48    /// Auto-size the output mesh.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub auto_size: Option<bool>,
51    /// Produce a quad mesh (subdivision-ready).
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 the smart-lowpoly pipeline after generation.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub smart_low_poly: Option<bool>,
63}
64
65impl TextToModelRequest {
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}