diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/video/multi_function/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/video/multi_function/mod.rs index 04155929dd..faf3e5d7c2 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/video/multi_function/mod.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/video/multi_function/mod.rs @@ -1,5 +1,6 @@ pub mod kling_2_5_turbo_multi_function_video_gen; pub mod kling_2_6_multi_function_video_gen; +pub mod sora_2_multi_function_video_gen; pub mod sora_2_pro_multi_function_video_gen; pub mod veo_3p1_fast_multi_function_video_gen; pub mod veo_3p1_multi_function_video_gen; \ No newline at end of file diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/generate/video/multi_function/sora_2_multi_function_video_gen.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/video/multi_function/sora_2_multi_function_video_gen.rs new file mode 100644 index 0000000000..85fbfe3734 --- /dev/null +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/generate/video/multi_function/sora_2_multi_function_video_gen.rs @@ -0,0 +1,66 @@ +use serde::{Deserialize, Serialize}; +use tokens::tokens::generic_inference_jobs::InferenceJobToken; +use tokens::tokens::media_files::MediaFileToken; +use utoipa::ToSchema; + +pub const SORA_2_MULTI_FUNCTION_VIDEO_VIDEO_PATH: &str = "/v1/generate/video/multi_function/sora_2"; + +/// Both text-to-video and image-to-video in one request. +#[derive(Serialize, Deserialize, ToSchema)] +pub struct Sora2MultiFunctionVideoGenRequest { + /// Idempotency token to prevent duplicate requests. + pub uuid_idempotency_token: String, + + /// "Required". + /// Required downstream, but we'll coerce null to empty string. + /// Text prompt. + pub prompt: Option, + + /// Optional. + /// Only for image-to-video + /// Source of the starting frame + /// If present, we're doing image-to-video + /// If absent, we're doing text-to-video + pub image_media_token: Option, + + /// Optional. + pub resolution: Option, + + /// Optional + /// Duration of the video + /// (this is uniform against all modes) + pub duration: Option, + + /// Optional. + pub aspect_ratio: Option, +} + +#[derive(Serialize, Deserialize, ToSchema)] +#[serde(rename_all = "snake_case")] +pub enum Sora2MultiFunctionVideoGenResolution { + Auto, + SevenTwentyP, +} + +#[derive(Serialize, Deserialize, ToSchema)] +#[serde(rename_all = "snake_case")] +pub enum Sora2MultiFunctionVideoGenDuration { + FourSeconds, + EightSeconds, + TwelveSeconds, +} + +#[derive(Serialize, Deserialize, ToSchema)] +#[serde(rename_all = "snake_case")] +pub enum Sora2MultiFunctionVideoGenAspectRatio { + Auto, + NineBySixteen, + SixteenByNine, +} + + +#[derive(Serialize, Deserialize, ToSchema)] +pub struct Sora2MultiFunctionVideoGenResponse { + pub success: bool, + pub inference_job_token: InferenceJobToken, +}