164 lines
4.5 KiB
Python
164 lines
4.5 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional, List, Dict, Any
|
|
from datetime import datetime
|
|
|
|
|
|
class ProjectBase(BaseModel):
|
|
"""项目基础模式"""
|
|
name: str = Field(..., description="项目名称")
|
|
|
|
|
|
class ProjectCreate(ProjectBase):
|
|
"""创建项目模式"""
|
|
pass
|
|
|
|
|
|
class ProjectUpdate(ProjectBase):
|
|
"""更新项目模式"""
|
|
script: Optional[str] = Field(None, description="剧本内容")
|
|
|
|
|
|
class ProjectResponse(ProjectBase):
|
|
"""项目响应模式"""
|
|
id: int
|
|
script: Optional[str] = None
|
|
full_script: Optional[str] = None
|
|
prompt: Optional[str] = None
|
|
video_url: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
deleted_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProjectListResponse(BaseModel):
|
|
"""项目列表响应模式"""
|
|
items: List[ProjectResponse]
|
|
total: int
|
|
page: int
|
|
size: int
|
|
|
|
|
|
class ProjectDetailResponse(BaseModel):
|
|
"""项目详情响应模式"""
|
|
project: ProjectResponse
|
|
assets: List['AssetResponse']
|
|
storyboards: List['StoryboardResponse']
|
|
|
|
|
|
# 素材相关模式
|
|
class AssetBase(BaseModel):
|
|
"""素材基础模式"""
|
|
name: str = Field(..., description="素材名称")
|
|
description: Optional[str] = Field(None, description="素材描述")
|
|
tags: Optional[List[str]] = Field(None, description="素材标签")
|
|
|
|
|
|
class AssetCreate(AssetBase):
|
|
"""创建素材模式"""
|
|
original_url: str = Field(..., description="素材原始URL")
|
|
|
|
|
|
class AssetResponse(AssetBase):
|
|
"""素材响应模式"""
|
|
id: int
|
|
project_id: int
|
|
original_url: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# 分镜相关模式
|
|
class StoryboardBase(BaseModel):
|
|
"""分镜基础模式"""
|
|
frame_prompt: str = Field(..., description="首帧提示词")
|
|
shot_prompt: str = Field(..., description="分镜动态内容提示词")
|
|
|
|
|
|
class StoryboardCreate(StoryboardBase):
|
|
"""创建分镜模式"""
|
|
frame_asset_ids: Optional[List[int]] = Field(None, description="首帧素材ID数组")
|
|
|
|
|
|
class StoryboardResponse(StoryboardBase):
|
|
"""分镜响应模式"""
|
|
id: int
|
|
project_id: int
|
|
frame_asset_ids: Optional[List[int]] = None
|
|
frame_image_url: Optional[str] = None
|
|
shot_video_url: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# 新增的请求模式
|
|
class GenerateScriptRequest(BaseModel):
|
|
"""生成剧本请求模式"""
|
|
script_or_idea: str = Field(..., description="剧本或创意内容")
|
|
prompt_template: str = Field(..., description="提示词模板,包含${script_or_idea}占位符")
|
|
|
|
|
|
class GenerateScriptResponse(BaseModel):
|
|
"""生成剧本响应模式"""
|
|
full_script: str = Field(..., description="生成的完整剧本")
|
|
assets: List[AssetResponse] = Field(..., description="生成的素材列表")
|
|
|
|
|
|
class GenerateStoryboardsRequest(BaseModel):
|
|
"""生成分镜请求模式"""
|
|
script: str = Field(..., description="用户剧本")
|
|
prompt_template: str = Field(..., description="提示词模板,包含${materials_description}、${script}占位符")
|
|
|
|
|
|
class UpdateAssetImageRequest(BaseModel):
|
|
"""更新素材图请求模式"""
|
|
image_url: str = Field(..., description="素材图片URL")
|
|
|
|
|
|
class UpdateAssetImageResponse(BaseModel):
|
|
"""更新素材图响应模式"""
|
|
message: str = Field(..., description="响应消息")
|
|
|
|
|
|
class GenerateAssetImageResponse(BaseModel):
|
|
"""生成单个素材图响应模式"""
|
|
asset: AssetResponse = Field(..., description="生成图片后的素材信息")
|
|
|
|
|
|
class GuideFrameRequest(BaseModel):
|
|
"""首帧图指导修改请求模式"""
|
|
guide_image_url: str = Field(..., description="指导图URL")
|
|
|
|
|
|
class GuideFrameResponse(BaseModel):
|
|
"""首帧图指导修改响应模式"""
|
|
frame_image_url: str = Field(..., description="修改后的首帧图URL")
|
|
|
|
|
|
class DeleteProjectResponse(BaseModel):
|
|
"""删除项目响应模式"""
|
|
message: str = Field(..., description="删除结果消息")
|
|
|
|
|
|
class ComposeVideoResponse(BaseModel):
|
|
"""合成项目视频响应模式"""
|
|
video_url: str = Field(..., description="合成后的项目视频URL")
|
|
|
|
|
|
# 一键复刻相关模式
|
|
class VideoReplicateRequest(BaseModel):
|
|
"""一键复刻请求模式"""
|
|
video_url: str = Field(..., description="要复刻的视频URL")
|
|
|
|
|
|
# 更新引用
|
|
ProjectDetailResponse.model_rebuild()
|