File size: 3,268 Bytes
5fbd25d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""V2 API models"""
from typing import List
from pydantic import BaseModel, Field
from fooocusapi.models.common.requests import CommonRequest
from fooocusapi.models.common.base import (
    ControlNetType,
    EnhanceCtrlNets, OutpaintExpansion,
    ImagePrompt,
    UpscaleOrVaryMethod
)


class ImagePromptJson(BaseModel):
    """Image prompt for V2 API"""
    cn_img: str | None = Field(None, description="Input image for image prompt as base64")
    cn_stop: float | None = Field(0, ge=0, le=1, description="Stop at for image prompt, 0 for default value")
    cn_weight: float | None = Field(0, ge=0, le=2, description="Weight for image prompt, 0 for default value")
    cn_type: ControlNetType = Field(default=ControlNetType.cn_ip, description="ControlNet type for image prompt")


class ImgInpaintOrOutpaintRequestJson(CommonRequest):
    """image inpaint or outpaint request"""
    input_image: str = Field('', description="Init image for inpaint or outpaint as base64")
    input_mask: str | None = Field('', description="Inpaint or outpaint mask as base64")
    inpaint_additional_prompt: str | None = Field('', description="Describe what you want to inpaint")
    outpaint_selections: List[OutpaintExpansion] = []
    outpaint_distance_left: int | None = Field(-1, description="Set outpaint left distance")
    outpaint_distance_right: int | None = Field(-1, description="Set outpaint right distance")
    outpaint_distance_top: int | None = Field(-1, description="Set outpaint top distance")
    outpaint_distance_bottom: int | None = Field(-1, description="Set outpaint bottom distance")
    image_prompts: List[ImagePromptJson | ImagePrompt] = []


class ImgPromptRequestJson(ImgInpaintOrOutpaintRequestJson):
    """img prompt request json"""
    input_image: str | None = Field(None, description="Init image for inpaint or outpaint as base64")
    image_prompts: List[ImagePromptJson | ImagePrompt]


class Text2ImgRequestWithPrompt(CommonRequest):
    """text to image request with prompt"""
    image_prompts: List[ImagePromptJson] = []


class ImgUpscaleOrVaryRequestJson(CommonRequest):
    """img upscale or vary request json"""
    uov_method: UpscaleOrVaryMethod = UpscaleOrVaryMethod.upscale_2
    upscale_value: float | None = Field(1.0, ge=1.0, le=5.0, description="Upscale custom value, 1.0 for default value")
    input_image: str = Field(description="Init image for upscale or outpaint as base64")
    image_prompts: List[ImagePromptJson | ImagePrompt] = []


class ImageEnhanceRequestJson(CommonRequest):
    """
    Image Enhance Request
    """
    enhance_input_image: str = Field(default='', description="Input image for enhance")
    enhance_checkbox: bool = Field(default=True, description="Enhance checkbox")
    enhance_uov_method: UpscaleOrVaryMethod = Field(default=UpscaleOrVaryMethod.strong_variation, description="Upscale or vary method")
    enhance_uov_processing_order: str = Field(default="Before First Enhancement", description="Upscale or vary processing order")
    enhance_uov_prompt_type: str = Field(default="Original Prompts", description="Upscale or vary prompt type")
    save_final_enhanced_image_only: bool = Field(True, description="Save Final Enhanced Image Only")
    enhance_ctrlnets: List[EnhanceCtrlNets]