diff --git a/apps/api/app/api/routes/generation_tasks.py b/apps/api/app/api/routes/generation_tasks.py index 8a4af564d..b6a111dc0 100644 --- a/apps/api/app/api/routes/generation_tasks.py +++ b/apps/api/app/api/routes/generation_tasks.py @@ -57,12 +57,12 @@ def _to_generation_task_response(task) -> GenerationTaskResponse: source_edit_plan_id=task.source_edit_plan_id or "", asset_select_mode=getattr(task, "asset_select_mode", ""), batch_id=getattr(task, "batch_id", ""), - is_preview=getattr(task, 'is_preview', True), - source_task_id=getattr(task, 'source_task_id', ''), - output_width=getattr(task, 'output_width', 1280), - output_height=getattr(task, 'output_height', 720), - cover_url=getattr(task, 'cover_url', ''), - custom_title=getattr(task, 'custom_title', ''), + is_preview=getattr(task, "is_preview", True), + source_task_id=getattr(task, "source_task_id", ""), + output_width=getattr(task, "output_width", 1280), + output_height=getattr(task, "output_height", 720), + cover_url=getattr(task, "cover_url", ""), + custom_title=getattr(task, "custom_title", ""), status=task.status, progress=task.progress, result_count=task.result_count, diff --git a/apps/api/app/schemas/generation_task.py b/apps/api/app/schemas/generation_task.py index f0f97028b..0b7fa3d86 100644 --- a/apps/api/app/schemas/generation_task.py +++ b/apps/api/app/schemas/generation_task.py @@ -3,6 +3,7 @@ from pydantic import BaseModel, Field, model_validator class ConfirmGenerationRequest(BaseModel): """确认生成请求体 — 基于预览任务创建正式生成任务""" + output_width: int = Field(default=1080, description="输出视频宽度") output_height: int = Field(default=1920, description="输出视频高度") cover_url: str = Field(default="", description="自定义封面图片 URL") diff --git a/apps/worker/worker_app/tasks/generation.py b/apps/worker/worker_app/tasks/generation.py index 6c6223421..8efc5ae22 100755 --- a/apps/worker/worker_app/tasks/generation.py +++ b/apps/worker/worker_app/tasks/generation.py @@ -96,7 +96,9 @@ def _probe_duration(local_path: Path) -> float: return OUTPUT_DURATION_SECONDS -def _create_fallback_clip(output_path: Path, title: str, width: int = OUTPUT_WIDTH, height: int = OUTPUT_HEIGHT) -> None: +def _create_fallback_clip( + output_path: Path, title: str, width: int = OUTPUT_WIDTH, height: int = OUTPUT_HEIGHT +) -> None: """创建 fallback 视频(无素材时)""" safe_title = title.replace(":", "\\:").replace("'", "\\'")[:80] _run_ffmpeg( @@ -265,10 +267,10 @@ def generate_video(self, task_id: str) -> dict: task_asset_ids = list(gen_task.asset_ids or []) batch_id = getattr(gen_task, "batch_id", "") or "" # 新增字段:分辨率、封面、标题 - output_width = getattr(gen_task, 'output_width', OUTPUT_WIDTH) or OUTPUT_WIDTH - output_height = getattr(gen_task, 'output_height', OUTPUT_HEIGHT) or OUTPUT_HEIGHT - cover_url = getattr(gen_task, 'cover_url', '') or '' - custom_title = getattr(gen_task, 'custom_title', '') or '' + output_width = getattr(gen_task, "output_width", OUTPUT_WIDTH) or OUTPUT_WIDTH + output_height = getattr(gen_task, "output_height", OUTPUT_HEIGHT) or OUTPUT_HEIGHT + cover_url = getattr(gen_task, "cover_url", "") or "" + custom_title = getattr(gen_task, "custom_title", "") or "" finally: session.close() @@ -304,7 +306,9 @@ def generate_video(self, task_id: str) -> dict: output_height=output_height, ) else: - _create_fallback_clip(output_path, f"Generated Video {task_id[:8]}", width=output_width, height=output_height) + _create_fallback_clip( + output_path, f"Generated Video {task_id[:8]}", width=output_width, height=output_height + ) file_size = output_path.stat().st_size duration = _probe_duration(output_path) diff --git a/packages/adapters/sqlalchemy_impl/generation_task_repository.py b/packages/adapters/sqlalchemy_impl/generation_task_repository.py index 6aae48dba..64a0f574c 100644 --- a/packages/adapters/sqlalchemy_impl/generation_task_repository.py +++ b/packages/adapters/sqlalchemy_impl/generation_task_repository.py @@ -27,12 +27,12 @@ def _to_domain(model: GenerationTaskModel) -> GenerationTask: source_edit_plan_id=model.source_edit_plan_id or "", asset_select_mode=model.asset_select_mode or "", batch_id=model.batch_id or "", - is_preview=getattr(model, 'is_preview', True), - source_task_id=getattr(model, 'source_task_id', '') or "", - output_width=getattr(model, 'output_width', 1280) or 1280, - output_height=getattr(model, 'output_height', 720) or 720, - cover_url=getattr(model, 'cover_url', '') or "", - custom_title=getattr(model, 'custom_title', '') or "", + is_preview=getattr(model, "is_preview", True), + source_task_id=getattr(model, "source_task_id", "") or "", + output_width=getattr(model, "output_width", 1280) or 1280, + output_height=getattr(model, "output_height", 720) or 720, + cover_url=getattr(model, "cover_url", "") or "", + custom_title=getattr(model, "custom_title", "") or "", created_at=model.created_at, ) diff --git a/tests/unit/test_confirm_generation.py b/tests/unit/test_confirm_generation.py index 1dfaa5c3a..7de24ea05 100644 --- a/tests/unit/test_confirm_generation.py +++ b/tests/unit/test_confirm_generation.py @@ -28,7 +28,6 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "apps", " from packages.domain.generation_task import GenerationTask, GenerationTaskStatus - # ── Stub Repository ──────────────────────────────────────────────────────────