erniebot_rs/text2image/
option.rs

1use serde::{Deserialize, Serialize};
2use strum_macros::{Display, EnumString};
3
4/* below are options for text2image */
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, Display, EnumString)]
7pub enum Size {
8    #[default]
9    #[strum(serialize = "1024x1024")]
10    #[serde(rename = "1024x1024")]
11    S1024x1024,
12    #[strum(serialize = "768x768")]
13    #[serde(rename = "768x768")]
14    S768x768,
15    #[strum(serialize = "768x1024")]
16    #[serde(rename = "768x1024")]
17    S768x1024,
18    #[strum(serialize = "1024x768")]
19    #[serde(rename = "1024x768")]
20    S1024x768,
21    #[strum(serialize = "576x1024")]
22    #[serde(rename = "576x1024")]
23    S576x1024,
24    #[strum(serialize = "1024x576")]
25    #[serde(rename = "1024x576")]
26    S1024x576,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, EnumString)]
30pub enum SamplerIndex {
31    #[default]
32    #[strum(serialize = "Euler a")]
33    #[serde(rename = "Euler a")]
34    EulerA,
35    #[strum(serialize = "Euler")]
36    #[serde(rename = "Euler")]
37    Euler,
38    #[strum(serialize = "DPM++ 2M")]
39    #[serde(rename = "DPM++ 2M")]
40    DPMpp2M,
41    #[strum(serialize = "DPM++ 2M Karras")]
42    #[serde(rename = "DPM++ 2M Karras")]
43    DPMpp2MKarras,
44    #[strum(serialize = "LMS Karras")]
45    #[serde(rename = "LMS Karras")]
46    LMSKarras,
47    #[strum(serialize = "DPM++ SDE")]
48    #[serde(rename = "DPM++ SDE")]
49    DPMppSDE,
50    #[strum(serialize = "DPM++ SDE Karras")]
51    #[serde(rename = "DPM++ SDE Karras")]
52    DPMppSDEKarras,
53    #[strum(serialize = "DPM2 a Karras")]
54    #[serde(rename = "DPM2 a Karras")]
55    DPM2AKarras,
56    #[strum(serialize = "Heun")]
57    #[serde(rename = "Heun")]
58    Heun,
59    #[strum(serialize = "DPM++ 2M SDE")]
60    #[serde(rename = "DPM++ 2M SDE")]
61    DPMpp2MSDE,
62    #[strum(serialize = "DPM++ 2M SDE Karras")]
63    #[serde(rename = "DPM++ 2M SDE Karras")]
64    DPMpp2MSDEKarras,
65    #[strum(serialize = "DPM2")]
66    #[serde(rename = "DPM2")]
67    DPM2,
68    #[strum(serialize = "DPM2 Karras")]
69    #[serde(rename = "DPM2 Karras")]
70    DPM2Karras,
71    #[strum(serialize = "DPM2 a")]
72    #[serde(rename = "DPM2 a")]
73    DPM2A,
74    #[strum(serialize = "LMS")]
75    #[serde(rename = "LMS")]
76    LMS,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, EnumString)]
80pub enum Style {
81    #[default]
82    #[strum(serialize = "Base")]
83    #[serde(rename = "Base")]
84    Base,
85    #[strum(serialize = "3D Model")]
86    #[serde(rename = "3D Model")]
87    Model3D,
88    #[strum(serialize = "Analog Film")]
89    #[serde(rename = "Analog Film")]
90    AnalogFilm,
91    #[strum(serialize = "Anime")]
92    #[serde(rename = "Anime")]
93    Anime,
94    #[strum(serialize = "Cinematic")]
95    #[serde(rename = "Cinematic")]
96    Cinematic,
97    #[strum(serialize = "Comic Book")]
98    #[serde(rename = "Comic Book")]
99    ComicBook,
100    #[strum(serialize = "Craft Clay")]
101    #[serde(rename = "Craft Clay")]
102    CraftClay,
103    #[strum(serialize = "Digital Art")]
104    #[serde(rename = "Digital Art")]
105    DigitalArt,
106    #[strum(serialize = "Enhance")]
107    #[serde(rename = "Enhance")]
108    Enhance,
109    #[strum(serialize = "Fantasy Art")]
110    #[serde(rename = "Fantasy Art")]
111    FantasyArt,
112    #[strum(serialize = "Isometric")]
113    #[serde(rename = "Isometric")]
114    Isometric,
115    #[strum(serialize = "Line Art")]
116    #[serde(rename = "Line Art")]
117    LineArt,
118    #[strum(serialize = "Lowpoly")]
119    #[serde(rename = "Lowpoly")]
120    Lowpoly,
121    #[strum(serialize = "Neonpunk")]
122    #[serde(rename = "Neonpunk")]
123    Neonpunk,
124    #[strum(serialize = "Origami")]
125    #[serde(rename = "Origami")]
126    Origami,
127    #[strum(serialize = "Photographic")]
128    #[serde(rename = "Photographic")]
129    Photographic,
130    #[strum(serialize = "Pixel Art")]
131    #[serde(rename = "Pixel Art")]
132    PixelArt,
133    #[strum(serialize = "Texture")]
134    #[serde(rename = "Texture")]
135    Texture,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, EnumString)]
139#[serde(rename_all(serialize = "snake_case", deserialize = "snake_case"))]
140pub enum Text2ImageOpt {
141    NegativePrompt(String),
142    Size(Size),
143    N(u32),     //1-4
144    Steps(u32), //10-50
145    SamplerIndex(SamplerIndex),
146    Seed(u32),     //0, 4294967295]
147    CfgScale(f32), //0-30
148    Style(Style),
149    UserId(String),
150}
151
152#[cfg(test)]
153mod tests {
154    use super::Size;
155    #[test]
156    fn test_size() {
157        let size = Size::S1024x1024;
158        assert_eq!(size.to_string(), "1024x1024");
159    }
160}