diff --git a/bench/minimax_bench.py b/bench/minimax_bench.py index 7e122c5..8ecd9c6 100644 --- a/bench/minimax_bench.py +++ b/bench/minimax_bench.py @@ -45,10 +45,12 @@ REF2VA_DEFAULT = "minimax_h3_ref2va_pruned_int8_convrot.safetensors" # stills, anime characters (Ashitaka, Spike), forests, volcanos — large files # (up to 23040x3840) for realistic reference-encoder load. BENCH_IMAGE = "bench2_jp_01.jpg" +# Node schema allows up to 9 reference images (plus 3 ref videos + 3 audios). BENCH_REF_SET = ["bench2_jp_01.jpg", "bench2_jp_gate_01.png", "bench2_ashitaka_01.jpg", "bench2_bebop_01.jpg", "bench2_forest_01.jpg", "bench2_forest_02.jpg", - "bench2_volcano_01.jpg", "bench2_volcano_02.png"] + "bench2_volcano_01.jpg", "bench2_volcano_02.png", + "bench2_jp_02.jpg"] T2V_PROMPT = ( "Cinematic aerial shot slowly orbiting a coastal lighthouse at golden hour, " @@ -354,6 +356,30 @@ def suite_key(fl2va, ref2va, prefix="", repeats=3): return cfgs +def suite_refmatrix(ref2va, prefix=""): + """Reference-variety matrix: ref count x ref resolution. + + Counts 1/2/4/8/9 at native ref size (match sizing); at 8 refs, a + resolution ladder from 0.1 MP pre-downscaled up to 'max' (2048px) sizing. + 864x480 5 s canvas throughout. + """ + cfgs = [] + for n in (1, 2, 4, 8, 9): + cfgs.append(make_cfg("ref2v", ref2va, 864, 480, 5, 20, 70, + f"{prefix}rm_{n}ref_full", warm=True, ref_count=n)) + for ds in (0.1, 0.2, 0.4): + cfgs.append(make_cfg("ref2v", ref2va, 864, 480, 5, 20, 71, + f"{prefix}rm_8ref_ds{int(ds*100):03d}", warm=True, + ref_count=8, ref_downscale=ds)) + cfgs.append(make_cfg("ref2v", ref2va, 864, 480, 5, 20, 72, + f"{prefix}rm_4ref_max", warm=True, ref_count=4, + ref_image_size="max")) + cfgs.append(make_cfg("ref2v", ref2va, 864, 480, 5, 20, 72, + f"{prefix}rm_9ref_max", warm=True, ref_count=9, + ref_image_size="max")) + return cfgs + + def suite_sweep(fl2va, ref2va, prefix=""): """Full sweep: tasks x durations x resolutions at fixed 20 steps. @@ -391,7 +417,7 @@ def main(): ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) ap.add_argument("--host", default=DEFAULT_HOST) - ap.add_argument("--suite", choices=["quick", "sweep", "refheavy", "family", "key"]) + ap.add_argument("--suite", choices=["quick", "sweep", "refheavy", "family", "key", "refmatrix"]) ap.add_argument("--repeats", type=int, default=3) ap.add_argument("--task", choices=["t2v", "i2v", "ref2v"]) ap.add_argument("--model", action="append", default=[], @@ -430,6 +456,8 @@ def main(): cfgs = suite_family(models["fl2va"], models["ref2va"], args.prefix) elif args.suite == "key": cfgs = suite_key(models["fl2va"], models["ref2va"], args.prefix, args.repeats) + elif args.suite == "refmatrix": + cfgs = suite_refmatrix(models["ref2va"], args.prefix) elif args.task: model = models["ref2va"] if args.task == "ref2v" else models["fl2va"] label = args.label or f"{args.task}_{args.width}x{args.height}_{args.seconds}s"