| from __future__ import annotations |
|
|
| import gradio as gr |
|
|
| from . import common |
| from . import frame_planning as frames |
|
|
|
|
| def validate_user_process_definition(process_definition: dict | None, get_model_def) -> list[str]: |
| settings = process_definition.get("settings") if isinstance(process_definition, dict) else None |
| if not isinstance(settings, dict): |
| return ["The selected settings file could not be read."] |
| model_type = str(settings.get("model_type") or "").strip() |
| if len(model_type) == 0: |
| return ["The selected settings file does not define a model."] |
| try: |
| model_def = frames.require_model_def(model_type, get_model_def) |
| except gr.Error as exc: |
| return [common.get_error_message(exc) or "The selected model is not available."] |
| problems: list[str] = [] |
| image_mode = common.coerce_int(settings.get("image_mode"), 0) |
| if image_mode != 0 or bool(model_def.get("audio_only", False)) or bool(model_def.get("image_outputs", False)) or bool(settings.get("image_outputs", False)): |
| problems.append("The selected settings must generate a video, not images or audio only.") |
| video_prompt_type = str(settings.get("video_prompt_type") or "") |
| if "V" not in video_prompt_type: |
| problems.append("Control Video must be enabled.") |
| if "I" in video_prompt_type: |
| problems.append("Reference Images must be disabled.") |
| image_prompt_types_allowed = str(model_def.get("image_prompt_types_allowed", "") or "") |
| if "V" not in image_prompt_types_allowed: |
| problems.append("The selected model must support using a source video for continuation.") |
| audio_prompt_type = str(settings.get("audio_prompt_type") or "") |
| audio_features = [] |
| if "A" in audio_prompt_type: |
| audio_features.append("Audio Source") |
| if "B" in audio_prompt_type: |
| audio_features.append("Audio Source #2") |
| if "X" in audio_prompt_type: |
| audio_features.append("two-speaker auto separation") |
| if len(audio_features) > 0: |
| problems.append("Disable these audio features: " + ", ".join(audio_features) + ".") |
| return problems |
|
|
|
|
| def format_user_process_validation_error(process_definition: dict | None, problems: list[str]) -> str: |
| name = str((process_definition or {}).get("name") or "selected settings").strip() |
| if len(problems) == 0: |
| return "" |
| return f'Cannot add "{name}" as a full-video process:\n- ' + "\n- ".join(problems) |
|
|