feat: Added support for Anime Style [WAN 2.2 I2V] #1

This commit is contained in:
Sagnik
2026-04-18 14:18:46 +05:30
parent c7994d17a9
commit 732dcaa39d
5 changed files with 332 additions and 24 deletions

View File

@@ -222,6 +222,27 @@ async def _upload_asset_to_comfy(db: Session, asset_id: Optional[str]) -> Option
)
def _apply_model_preset(prompt: str, negative_prompt: str, model_preset: Optional[str]) -> tuple[str, str]:
if model_preset != "wan22-a14b-anime-style":
return prompt, negative_prompt
positive = prompt
negative = negative_prompt
if "An1meStyl3" not in positive:
positive = f"An1meStyl3, AnimeStyle, {positive}".strip(", ")
elif "AnimeStyle" not in positive:
positive = f"AnimeStyle, {positive}".strip(", ")
anime_negative = "(((realistic))), ((photograph))"
if "realistic" not in negative.lower():
negative = f"{negative}, {anime_negative}".strip(", ")
elif "photograph" not in negative.lower():
negative = f"{negative}, ((photograph))".strip(", ")
return positive, negative
def _validate_job(job: Job) -> list[str]:
errors = []
if not job.prompt or not job.prompt.strip():
@@ -265,18 +286,25 @@ async def run_job(job_id: str) -> None:
ref_names.append(uploaded)
settings_dict = json.loads(job.settings_json) if job.settings_json else {}
binder = WorkflowBinder(select_template_name(job.mode, job.submode))
model_preset = settings_dict.get("model_preset")
template_name = select_template_name(job.mode, job.submode, model_preset)
binder = WorkflowBinder(template_name)
if "PLACEHOLDER" in binder.status.upper():
raise RuntimeError(
f"Workflow template '{select_template_name(job.mode, job.submode)}' is still a placeholder. "
f"Workflow template '{template_name}' is still a placeholder. "
"Replace it with the production ComfyUI export before running real generations."
)
raw_seed = settings_dict.get("seed", 0)
seed = raw_seed if isinstance(raw_seed, int) and raw_seed >= 0 else 0
positive_prompt, negative_prompt = _apply_model_preset(
job.prompt,
job.negative_prompt or "",
model_preset,
)
params = {
"positive_prompt": job.prompt,
"negative_prompt": job.negative_prompt or "",
"positive_prompt": positive_prompt,
"negative_prompt": negative_prompt,
"ground_truth": gt_name,
"motion_video": motion_name,
"audio": audio_name,
@@ -288,7 +316,7 @@ async def run_job(job_id: str) -> None:
}
workflow = binder.bind(params)
await _validate_runtime_models(workflow)
job.workflow_template_name = select_template_name(job.mode, job.submode)
job.workflow_template_name = template_name
job.workflow_template_version = binder.version
db.commit()