mirror of
https://git.datalinker.icu/comfyanonymous/ComfyUI
synced 2025-12-09 22:14:34 +08:00
* feat(api-nodes): implement new API client for V3 nodes * feat(api-nodes): implement new API client for V3 nodes * feat(api-nodes): implement new API client for V3 nodes * converted WAN nodes to use new client; polishing * fix(auth): do not leak authentification for the absolute urls * convert BFL API nodes to use new API client; remove deprecated BFL nodes * converted Google Veo nodes * fix(Veo3.1 model): take into account "generate_audio" parameter
112 lines
3.3 KiB
Python
112 lines
3.3 KiB
Python
from typing import Optional, Union
|
|
from enum import Enum
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class Image2(BaseModel):
|
|
bytesBase64Encoded: str
|
|
gcsUri: Optional[str] = None
|
|
mimeType: Optional[str] = None
|
|
|
|
|
|
class Image3(BaseModel):
|
|
bytesBase64Encoded: Optional[str] = None
|
|
gcsUri: str
|
|
mimeType: Optional[str] = None
|
|
|
|
|
|
class Instance1(BaseModel):
|
|
image: Optional[Union[Image2, Image3]] = Field(
|
|
None, description='Optional image to guide video generation'
|
|
)
|
|
prompt: str = Field(..., description='Text description of the video')
|
|
|
|
|
|
class PersonGeneration1(str, Enum):
|
|
ALLOW = 'ALLOW'
|
|
BLOCK = 'BLOCK'
|
|
|
|
|
|
class Parameters1(BaseModel):
|
|
aspectRatio: Optional[str] = Field(None, examples=['16:9'])
|
|
durationSeconds: Optional[int] = None
|
|
enhancePrompt: Optional[bool] = None
|
|
generateAudio: Optional[bool] = Field(
|
|
None,
|
|
description='Generate audio for the video. Only supported by veo 3 models.',
|
|
)
|
|
negativePrompt: Optional[str] = None
|
|
personGeneration: Optional[PersonGeneration1] = None
|
|
sampleCount: Optional[int] = None
|
|
seed: Optional[int] = None
|
|
storageUri: Optional[str] = Field(
|
|
None, description='Optional Cloud Storage URI to upload the video'
|
|
)
|
|
|
|
|
|
class VeoGenVidRequest(BaseModel):
|
|
instances: Optional[list[Instance1]] = None
|
|
parameters: Optional[Parameters1] = None
|
|
|
|
|
|
class VeoGenVidResponse(BaseModel):
|
|
name: str = Field(
|
|
...,
|
|
description='Operation resource name',
|
|
examples=[
|
|
'projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8'
|
|
],
|
|
)
|
|
|
|
|
|
class VeoGenVidPollRequest(BaseModel):
|
|
operationName: str = Field(
|
|
...,
|
|
description='Full operation name (from predict response)',
|
|
examples=[
|
|
'projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/OPERATION_ID'
|
|
],
|
|
)
|
|
|
|
|
|
class Video(BaseModel):
|
|
bytesBase64Encoded: Optional[str] = Field(
|
|
None, description='Base64-encoded video content'
|
|
)
|
|
gcsUri: Optional[str] = Field(None, description='Cloud Storage URI of the video')
|
|
mimeType: Optional[str] = Field(None, description='Video MIME type')
|
|
|
|
|
|
class Error1(BaseModel):
|
|
code: Optional[int] = Field(None, description='Error code')
|
|
message: Optional[str] = Field(None, description='Error message')
|
|
|
|
|
|
class Response1(BaseModel):
|
|
field_type: Optional[str] = Field(
|
|
None,
|
|
alias='@type',
|
|
examples=[
|
|
'type.googleapis.com/cloud.ai.large_models.vision.GenerateVideoResponse'
|
|
],
|
|
)
|
|
raiMediaFilteredCount: Optional[int] = Field(
|
|
None, description='Count of media filtered by responsible AI policies'
|
|
)
|
|
raiMediaFilteredReasons: Optional[list[str]] = Field(
|
|
None, description='Reasons why media was filtered by responsible AI policies'
|
|
)
|
|
videos: Optional[list[Video]] = None
|
|
|
|
|
|
class VeoGenVidPollResponse(BaseModel):
|
|
done: Optional[bool] = None
|
|
error: Optional[Error1] = Field(
|
|
None, description='Error details if operation failed'
|
|
)
|
|
name: Optional[str] = None
|
|
response: Optional[Response1] = Field(
|
|
None, description='The actual prediction response if done is true'
|
|
)
|