All checks were successful
Build and Push Docker Image / build (push) Successful in 1m13s
114 lines
3.2 KiB
Python
114 lines
3.2 KiB
Python
from typing import Any, Dict, List, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class FaceSwapperOptions(BaseModel):
|
|
model: str = 'hyperswap_1a_256'
|
|
pixel_boost: Optional[str] = None
|
|
weight: float = 0.5
|
|
|
|
|
|
class FaceEnhancerOptions(BaseModel):
|
|
model: str = 'gfpgan_1.4'
|
|
blend: int = 80
|
|
weight: float = 0.5
|
|
|
|
|
|
class FaceEditorOptions(BaseModel):
|
|
model: str = 'live_portrait'
|
|
eyebrow_direction: Optional[float] = None
|
|
eye_gaze_horizontal: Optional[float] = None
|
|
eye_gaze_vertical: Optional[float] = None
|
|
eye_open_ratio: Optional[float] = None
|
|
lip_open_ratio: Optional[float] = None
|
|
mouth_grim: Optional[float] = None
|
|
mouth_pout: Optional[float] = None
|
|
mouth_purse: Optional[float] = None
|
|
mouth_smile: Optional[float] = None
|
|
mouth_position_horizontal: Optional[float] = None
|
|
mouth_position_vertical: Optional[float] = None
|
|
head_pitch: Optional[float] = None
|
|
head_yaw: Optional[float] = None
|
|
head_roll: Optional[float] = None
|
|
|
|
|
|
class LipSyncerOptions(BaseModel):
|
|
model: str = 'wav2lip_96'
|
|
|
|
|
|
class AgeModifierOptions(BaseModel):
|
|
model: str = 'styleganex_age'
|
|
direction: int = 0
|
|
|
|
|
|
class ExpressionRestorerOptions(BaseModel):
|
|
model: str = 'live_portrait'
|
|
factor: int = 80
|
|
|
|
|
|
class FrameEnhancerOptions(BaseModel):
|
|
model: str = 'span_kendata_1x'
|
|
blend: int = 80
|
|
|
|
|
|
class FrameColorizerOptions(BaseModel):
|
|
model: str = 'ddcolor'
|
|
blend: int = 80
|
|
size: str = '256x256'
|
|
|
|
|
|
class BackgroundRemoverOptions(BaseModel):
|
|
model: str = 'isnet_general_use'
|
|
|
|
|
|
class FaceDetectorOptions(BaseModel):
|
|
model: str = 'yolo_face'
|
|
size: str = '640x640'
|
|
score: float = 0.5
|
|
|
|
|
|
class FaceSelectorOptions(BaseModel):
|
|
mode: str = 'reference'
|
|
order: str = 'large-small'
|
|
gender: Optional[str] = None
|
|
race: Optional[str] = None
|
|
age_start: Optional[int] = None
|
|
age_end: Optional[int] = None
|
|
|
|
|
|
class OutputOptions(BaseModel):
|
|
image_quality: int = 80
|
|
image_scale: float = 1.0
|
|
video_encoder: Optional[str] = None
|
|
video_preset: str = 'veryfast'
|
|
video_quality: int = 80
|
|
video_scale: float = 1.0
|
|
video_fps: Optional[float] = None
|
|
audio_encoder: Optional[str] = None
|
|
audio_quality: int = 80
|
|
audio_volume: int = 100
|
|
|
|
|
|
class ProcessingOptions(BaseModel):
|
|
processors: List[str] = Field(default_factory=lambda: ['face_swapper'])
|
|
face_swapper: Optional[FaceSwapperOptions] = None
|
|
face_enhancer: Optional[FaceEnhancerOptions] = None
|
|
face_editor: Optional[FaceEditorOptions] = None
|
|
lip_syncer: Optional[LipSyncerOptions] = None
|
|
age_modifier: Optional[AgeModifierOptions] = None
|
|
expression_restorer: Optional[ExpressionRestorerOptions] = None
|
|
frame_enhancer: Optional[FrameEnhancerOptions] = None
|
|
frame_colorizer: Optional[FrameColorizerOptions] = None
|
|
background_remover: Optional[BackgroundRemoverOptions] = None
|
|
face_detector: Optional[FaceDetectorOptions] = None
|
|
face_selector: Optional[FaceSelectorOptions] = None
|
|
output: Optional[OutputOptions] = None
|
|
execution_thread_count: Optional[int] = None
|
|
video_memory_strategy: Optional[str] = None
|
|
|
|
|
|
class ProcessingResponse(BaseModel):
|
|
output_path: str
|
|
processing_time: float
|