修复视频尺寸传参未生效的问题
This commit is contained in:
@@ -76,12 +76,12 @@ async def list_tts_workflows(pixelle_video: PixelleVideoDep):
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.get("/workflows/image", response_model=WorkflowListResponse)
|
||||
async def list_image_workflows(pixelle_video: PixelleVideoDep):
|
||||
@router.get("/workflows/media", response_model=WorkflowListResponse)
|
||||
async def list_media_workflows(pixelle_video: PixelleVideoDep):
|
||||
"""
|
||||
List available image generation workflows
|
||||
List available media workflows (both image and video)
|
||||
|
||||
Returns list of image workflows from both RunningHub and self-hosted sources.
|
||||
Returns list of all media workflows from both RunningHub and self-hosted sources.
|
||||
|
||||
Example response:
|
||||
```json
|
||||
@@ -94,13 +94,41 @@ async def list_image_workflows(pixelle_video: PixelleVideoDep):
|
||||
"path": "workflows/runninghub/image_flux.json",
|
||||
"key": "runninghub/image_flux.json",
|
||||
"workflow_id": "123456"
|
||||
},
|
||||
{
|
||||
"name": "video_wan2.1.json",
|
||||
"display_name": "video_wan2.1.json - Runninghub",
|
||||
"source": "runninghub",
|
||||
"path": "workflows/runninghub/video_wan2.1.json",
|
||||
"key": "runninghub/video_wan2.1.json",
|
||||
"workflow_id": "123457"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
"""
|
||||
try:
|
||||
# Get all workflows from media service (image generation is handled by media service)
|
||||
# Get all workflows from media service (includes both image and video)
|
||||
all_workflows = pixelle_video.media.list_workflows()
|
||||
|
||||
media_workflows = [WorkflowInfo(**wf) for wf in all_workflows]
|
||||
|
||||
return WorkflowListResponse(workflows=media_workflows)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"List media workflows error: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
# Keep old endpoint for backward compatibility
|
||||
@router.get("/workflows/image", response_model=WorkflowListResponse)
|
||||
async def list_image_workflows(pixelle_video: PixelleVideoDep):
|
||||
"""
|
||||
List available image workflows (deprecated, use /workflows/media instead)
|
||||
|
||||
This endpoint is kept for backward compatibility but will filter to image_ workflows only.
|
||||
"""
|
||||
try:
|
||||
all_workflows = pixelle_video.media.list_workflows()
|
||||
|
||||
# Filter to image workflows only (filename starts with "image_")
|
||||
|
||||
@@ -63,6 +63,17 @@ async def generate_video_sync(
|
||||
try:
|
||||
logger.info(f"Sync video generation: {request_body.text[:50]}...")
|
||||
|
||||
# Auto-determine media_width and media_height from template meta tags (required)
|
||||
if not request_body.frame_template:
|
||||
raise ValueError("frame_template is required to determine media size")
|
||||
|
||||
from pixelle_video.services.frame_html import HTMLFrameGenerator
|
||||
from pixelle_video.utils.template_util import resolve_template_path
|
||||
template_path = resolve_template_path(request_body.frame_template)
|
||||
generator = HTMLFrameGenerator(template_path)
|
||||
media_width, media_height = generator.get_media_size()
|
||||
logger.debug(f"Auto-determined media size from template: {media_width}x{media_height}")
|
||||
|
||||
# Build video generation parameters
|
||||
video_params = {
|
||||
"text": request_body.text,
|
||||
@@ -73,8 +84,9 @@ async def generate_video_sync(
|
||||
"max_narration_words": request_body.max_narration_words,
|
||||
"min_image_prompt_words": request_body.min_image_prompt_words,
|
||||
"max_image_prompt_words": request_body.max_image_prompt_words,
|
||||
# Note: image_width and image_height are now auto-determined from template
|
||||
"image_workflow": request_body.image_workflow,
|
||||
"media_width": media_width,
|
||||
"media_height": media_height,
|
||||
"media_workflow": request_body.media_workflow,
|
||||
"video_fps": request_body.video_fps,
|
||||
"frame_template": request_body.frame_template,
|
||||
"prompt_prefix": request_body.prompt_prefix,
|
||||
@@ -150,6 +162,17 @@ async def generate_video_async(
|
||||
# Define async execution function
|
||||
async def execute_video_generation():
|
||||
"""Execute video generation in background"""
|
||||
# Auto-determine media_width and media_height from template meta tags (required)
|
||||
if not request_body.frame_template:
|
||||
raise ValueError("frame_template is required to determine media size")
|
||||
|
||||
from pixelle_video.services.frame_html import HTMLFrameGenerator
|
||||
from pixelle_video.utils.template_util import resolve_template_path
|
||||
template_path = resolve_template_path(request_body.frame_template)
|
||||
generator = HTMLFrameGenerator(template_path)
|
||||
media_width, media_height = generator.get_media_size()
|
||||
logger.debug(f"Auto-determined media size from template: {media_width}x{media_height}")
|
||||
|
||||
# Build video generation parameters
|
||||
video_params = {
|
||||
"text": request_body.text,
|
||||
@@ -160,8 +183,9 @@ async def generate_video_async(
|
||||
"max_narration_words": request_body.max_narration_words,
|
||||
"min_image_prompt_words": request_body.min_image_prompt_words,
|
||||
"max_image_prompt_words": request_body.max_image_prompt_words,
|
||||
# Note: image_width and image_height are now auto-determined from template
|
||||
"image_workflow": request_body.image_workflow,
|
||||
"media_width": media_width,
|
||||
"media_height": media_height,
|
||||
"media_workflow": request_body.media_workflow,
|
||||
"video_fps": request_body.video_fps,
|
||||
"frame_template": request_body.frame_template,
|
||||
"prompt_prefix": request_body.prompt_prefix,
|
||||
|
||||
@@ -56,9 +56,9 @@ class VideoGenerateRequest(BaseModel):
|
||||
min_image_prompt_words: int = Field(30, ge=10, le=100, description="Min image prompt words")
|
||||
max_image_prompt_words: int = Field(60, ge=10, le=200, description="Max image prompt words")
|
||||
|
||||
# === Image Parameters ===
|
||||
# Note: image_width and image_height are now auto-determined from template meta tags
|
||||
image_workflow: Optional[str] = Field(None, description="Custom image workflow")
|
||||
# === Media Parameters ===
|
||||
# Note: media_width and media_height are auto-determined from template meta tags
|
||||
media_workflow: Optional[str] = Field(None, description="Custom media workflow (image or video)")
|
||||
|
||||
# === Video Parameters ===
|
||||
video_fps: int = Field(30, ge=15, le=60, description="Video FPS")
|
||||
|
||||
Reference in New Issue
Block a user