from __future__ import annotations from enum import Enum from typing import Optional from pydantic import BaseModel, Field, confloat class StabilityFormat(str, Enum): png = 'png' jpeg = 'jpeg' webp = 'webp' class StabilityAspectRatio(str, Enum): ratio_1_1 = "1:1" ratio_16_9 = "16:9" ratio_9_16 = "9:16" ratio_3_2 = "3:2" ratio_2_3 = "2:3" ratio_5_4 = "5:4" ratio_4_5 = "4:5" ratio_21_9 = "21:9" ratio_9_21 = "9:21" def get_stability_style_presets(include_none=True): presets = [] if include_none: presets.append("None") return presets + [x.value for x in StabilityStylePreset] class StabilityStylePreset(str, Enum): _3d_model = "3d-model" analog_film = "analog-film" anime = "anime" cinematic = "cinematic" comic_book = "comic-book" digital_art = "digital-art" enhance = "enhance" fantasy_art = "fantasy-art" isometric = "isometric" line_art = "line-art" low_poly = "low-poly" modeling_compound = "modeling-compound" neon_punk = "neon-punk" origami = "origami" photographic = "photographic" pixel_art = "pixel-art" tile_texture = "tile-texture" class Stability_SD3_5_Model(str, Enum): sd3_5_large = "sd3.5-large" # sd3_5_large_turbo = "sd3.5-large-turbo" sd3_5_medium = "sd3.5-medium" class Stability_SD3_5_GenerationMode(str, Enum): text_to_image = "text-to-image" image_to_image = "image-to-image" class StabilityStable3_5Request(BaseModel): model: str = Field(...) mode: str = Field(...) prompt: str = Field(...) negative_prompt: Optional[str] = Field(None) aspect_ratio: Optional[str] = Field(None) seed: Optional[int] = Field(None) output_format: Optional[str] = Field(StabilityFormat.png.value) image: Optional[str] = Field(None) style_preset: Optional[str] = Field(None) cfg_scale: float = Field(...) strength: Optional[confloat(ge=0.0, le=1.0)] = Field(None) class StabilityUpscaleConservativeRequest(BaseModel): prompt: str = Field(...) negative_prompt: Optional[str] = Field(None) seed: Optional[int] = Field(None) output_format: Optional[str] = Field(StabilityFormat.png.value) image: Optional[str] = Field(None) creativity: Optional[confloat(ge=0.2, le=0.5)] = Field(None) class StabilityUpscaleCreativeRequest(BaseModel): prompt: str = Field(...) negative_prompt: Optional[str] = Field(None) seed: Optional[int] = Field(None) output_format: Optional[str] = Field(StabilityFormat.png.value) image: Optional[str] = Field(None) creativity: Optional[confloat(ge=0.1, le=0.5)] = Field(None) style_preset: Optional[str] = Field(None) class StabilityStableUltraRequest(BaseModel): prompt: str = Field(...) negative_prompt: Optional[str] = Field(None) aspect_ratio: Optional[str] = Field(None) seed: Optional[int] = Field(None) output_format: Optional[str] = Field(StabilityFormat.png.value) image: Optional[str] = Field(None) style_preset: Optional[str] = Field(None) strength: Optional[confloat(ge=0.0, le=1.0)] = Field(None) class StabilityStableUltraResponse(BaseModel): image: Optional[str] = Field(None) finish_reason: Optional[str] = Field(None) seed: Optional[int] = Field(None) class StabilityResultsGetResponse(BaseModel): image: Optional[str] = Field(None) finish_reason: Optional[str] = Field(None) seed: Optional[int] = Field(None) id: Optional[str] = Field(None) name: Optional[str] = Field(None) errors: Optional[list[str]] = Field(None) status: Optional[str] = Field(None) result: Optional[str] = Field(None) class StabilityAsyncResponse(BaseModel): id: Optional[str] = Field(None)