默认模板支持配置

This commit is contained in:
puke
2025-11-07 15:07:11 +08:00
parent c260504fc2
commit 9244a80363
6 changed files with 63 additions and 5 deletions

View File

@@ -35,7 +35,26 @@ class ConfigManager:
def _load(self) -> PixelleVideoConfig:
"""Load configuration from file"""
data = load_config_dict(str(self.config_path))
return PixelleVideoConfig(**data)
config = PixelleVideoConfig(**data)
# Validate template path exists
self._validate_template(config.template.default_template)
return config
def _validate_template(self, template_path: str):
"""Validate that the configured template exists"""
from pixelle_video.utils.template_util import resolve_template_path
try:
# Try to resolve the template path
resolved_path = resolve_template_path(template_path)
logger.debug(f"Template validation passed: {template_path} -> {resolved_path}")
except FileNotFoundError as e:
logger.warning(
f"Configured default template '{template_path}' not found. "
f"Will fall back to '1080x1920/default.html' if needed. Error: {e}"
)
def reload(self):
"""Reload configuration from file"""

View File

@@ -55,11 +55,20 @@ class ComfyUIConfig(BaseModel):
image: ImageSubConfig = Field(default_factory=ImageSubConfig, description="Image-specific configuration")
class TemplateConfig(BaseModel):
"""Template configuration"""
default_template: str = Field(
default="1080x1920/default.html",
description="Default frame template path"
)
class PixelleVideoConfig(BaseModel):
"""Pixelle-Video main configuration"""
project_name: str = Field(default="Pixelle-Video", description="Project name")
llm: LLMConfig = Field(default_factory=LLMConfig)
comfyui: ComfyUIConfig = Field(default_factory=ComfyUIConfig)
template: TemplateConfig = Field(default_factory=TemplateConfig)
def is_llm_configured(self) -> bool:
"""Check if LLM is properly configured"""

View File

@@ -83,7 +83,7 @@ class CustomPipeline(BasePipeline):
image_width: int = 1024,
image_height: int = 1024,
frame_template: str = "1080x1920/default.html",
frame_template: Optional[str] = None,
video_fps: int = 30,
output_path: Optional[str] = None,
@@ -133,6 +133,12 @@ class CustomPipeline(BasePipeline):
user_specified_output = output_path
output_path = get_task_final_video_path(task_id)
# Determine frame template
# Priority: explicit param > config default > hardcoded default
if frame_template is None:
template_config = self.core.config.get("template", {})
frame_template = template_config.get("default_template", "1080x1920/default.html")
# ========== Step 0.5: Check template requirements ==========
# Detect if template requires {{image}} parameter
# This allows skipping the entire image generation pipeline for text-only templates

View File

@@ -221,6 +221,12 @@ class StandardPipeline(BasePipeline):
else: # comfyui
final_voice_id = voice_id # For ComfyUI, might be None
# Determine frame template
# Priority: explicit param > config default > hardcoded default
if frame_template is None:
template_config = self.core.config.get("template", {})
frame_template = template_config.get("default_template", "1080x1920/default.html")
# Create storyboard config
config = StoryboardConfig(
task_id=task_id,
@@ -238,7 +244,7 @@ class StandardPipeline(BasePipeline):
image_width=image_width,
image_height=image_height,
image_workflow=image_workflow,
frame_template=frame_template or "1080x1920/default.html",
frame_template=frame_template,
template_params=template_params
)