fix: align Freepik API paths with OpenAPI spec
Some checks failed
Build and Push Docker Image / build (push) Failing after 9s
Some checks failed
Build and Push Docker Image / build (push) Failing after 9s
The original implementation used guessed endpoint paths that don't match
the actual Freepik API. Key fixes based on their OpenAPI spec:
- Task polling is per-endpoint (e.g. GET /v1/ai/text-to-image/flux-dev/{task-id})
not a generic /v1/ai/tasks/{id}. freepik_client now returns TaskResult
with status_path, and task_tracker polls using that path.
- Fixed endpoint paths: flux-pro -> flux-pro-v1-1, upscale -> image-upscaler,
relight -> image-relight, style-transfer -> image-style-transfer,
expand -> image-expand/flux-pro, inpaint -> ideogram-image-edit,
remove-background -> beta/remove-background, classifier -> classifier/image,
audio-isolate -> audio-isolation, icon -> text-to-icon
- Fixed video paths: kling -> kling-o1-pro with kling-o1 status path,
minimax -> minimax-hailuo-02-1080p, seedance -> seedance-pro-1080p
- Fixed request schemas to match actual API params (e.g. scale_factor
not scale, reference_image not style_reference, image_url for bg removal)
- Fixed response parsing: status is uppercase (COMPLETED not completed),
results in data.generated[] array, classifier returns [{class_name, probability}]
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,36 +6,43 @@ from pydantic import BaseModel, Field
|
||||
class UpscaleCreativeRequest(BaseModel):
|
||||
image: str = Field(..., description='Base64-encoded image')
|
||||
prompt: Optional[str] = None
|
||||
scale: Optional[int] = Field(None, ge=2, le=4)
|
||||
creativity: Optional[float] = Field(None, ge=0.0, le=1.0)
|
||||
resemblance: Optional[float] = Field(None, ge=0.0, le=1.0)
|
||||
scale_factor: Optional[str] = Field(None, description='2x, 4x, 8x, or 16x')
|
||||
creativity: Optional[int] = Field(None, ge=-10, le=10)
|
||||
resemblance: Optional[int] = Field(None, ge=-10, le=10)
|
||||
optimized_for: Optional[str] = Field(
|
||||
None,
|
||||
description='standard, soft_portraits, hard_portraits, art_n_illustration, etc.',
|
||||
)
|
||||
|
||||
|
||||
class UpscalePrecisionRequest(BaseModel):
|
||||
image: str = Field(..., description='Base64-encoded image')
|
||||
scale: Optional[int] = Field(None, ge=2, le=4)
|
||||
scale_factor: Optional[str] = Field(None, description='2x or 4x')
|
||||
|
||||
|
||||
class RelightRequest(BaseModel):
|
||||
image: str = Field(..., description='Base64-encoded image')
|
||||
image: str = Field(..., description='Base64 or URL of image')
|
||||
prompt: Optional[str] = None
|
||||
light_source: Optional[str] = None
|
||||
intensity: Optional[float] = Field(None, ge=0.0, le=1.0)
|
||||
transfer_light_from_reference_image: Optional[str] = Field(
|
||||
None, description='Base64 or URL of reference image for light transfer',
|
||||
)
|
||||
light_transfer_strength: Optional[int] = Field(None, ge=0, le=100)
|
||||
|
||||
|
||||
class StyleTransferRequest(BaseModel):
|
||||
image: str = Field(..., description='Base64-encoded image')
|
||||
style_reference: str = Field(..., description='Base64-encoded style reference image')
|
||||
strength: Optional[float] = Field(None, ge=0.0, le=1.0)
|
||||
image: str = Field(..., description='Base64 or URL of image')
|
||||
reference_image: str = Field(..., description='Base64 or URL of style reference image')
|
||||
prompt: Optional[str] = None
|
||||
style_strength: Optional[int] = Field(None, ge=0, le=100)
|
||||
structure_strength: Optional[int] = Field(None, ge=0, le=100)
|
||||
|
||||
|
||||
class ExpandRequest(BaseModel):
|
||||
image: str = Field(..., description='Base64-encoded image')
|
||||
image: str = Field(..., description='Base64 or URL of image')
|
||||
prompt: Optional[str] = None
|
||||
direction: Optional[str] = Field(None, description='Expansion direction')
|
||||
|
||||
|
||||
class InpaintRequest(BaseModel):
|
||||
image: str = Field(..., description='Base64-encoded image')
|
||||
mask: str = Field(..., description='Base64-encoded mask image')
|
||||
image: str = Field(..., description='Base64 or URL of image')
|
||||
mask: str = Field(..., description='Base64 or URL of mask image')
|
||||
prompt: str = Field(..., min_length=1)
|
||||
|
||||
Reference in New Issue
Block a user