#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""h3_shot.py — 用 dasiwa V18 工作流为《九九八十一》MV 逐镜生成动态片段。

用法（单镜测试）:
  python3 h3_shot.py --image <参考图> --prompt-file <提示词> --out-topic <主题> \
      [--variant v1] [--duration 5] [--steps 8] [--size 1344x768] [--seed 123456]

说明:
  · 复用 ~/Downloads/dasiwa-h3-research/v18_pipeline.py 的 run_pipeline（含上传/提交/轮询/下载）
  · 输出目录改为本项目 06-H3片段/（覆盖模块内的 OUTPUT_DIR）
  · seed 固定以便复现；耗时与参数写入 logs/h3_<topic>.log
"""
import argparse, os, sys, time, json
from pathlib import Path

sys.path.insert(0, "/home/zyw/Downloads/dasiwa-h3-research")
import v18_pipeline as p  # noqa: E402

ROOT = Path("/home/zyw/Downloads/dl-hub/54-九九八十一MV")
p.OUTPUT_DIR = ROOT / "06-H3片段"
p.OUTPUT_SUBDIR = "54-九九八十一MV/06-H3片段"
p.OUTPUT_DIR.mkdir(parents=True, exist_ok=True)


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--image", required=True)
    ap.add_argument("--extra-image", action="append", default=[])
    ap.add_argument("--prompt-file", required=True)
    ap.add_argument("--out-topic", required=True)
    ap.add_argument("--variant", default=None)
    ap.add_argument("--duration", type=int, default=5)
    ap.add_argument("--steps", type=int, default=8)
    ap.add_argument("--size", default="1344x768")
    ap.add_argument("--seed", type=int, default=666666)
    ap.add_argument("--fps", type=float, default=24.0)
    ap.add_argument("--no-rtx", action="store_true", help="关闭 RTX VSR 放大（更快）")
    a = ap.parse_args()

    w, h = (int(x) for x in a.size.lower().split("x"))
    prompt = Path(a.prompt_file).read_text(encoding="utf-8").strip()
    t0 = time.time()
    res = p.run_pipeline(
        image_path=a.image, requirement=a.out_topic, prompt_override=prompt,
        extra_images=a.extra_image or None,
        width=w, height=h, duration=a.duration, seed=a.seed, steps=a.steps, fps=a.fps,
        upscale_rtx=not a.no_rtx, topic=a.out_topic, variant=a.variant,
    )
    dt = time.time() - t0
    print(f"[OK] 用时 {dt/60:.1f} 分钟")
    print(json.dumps({k: str(v) for k, v in res.items()}, ensure_ascii=False, indent=1)[:1200])
    log = ROOT / "logs" / ("h3_%s.log" % a.out_topic)
    with open(log, "a", encoding="utf-8") as f:
        f.write(json.dumps({"topic": a.out_topic, "variant": a.variant, "image": a.image,
                            "duration": a.duration, "steps": a.steps, "size": a.size,
                            "seed": a.seed, "seconds": round(dt, 1),
                            "result": {k: str(v) for k, v in res.items()}}, ensure_ascii=False) + "\n")
    return 0


if __name__ == "__main__":
    sys.exit(main())
