ixim's picture
Add files using upload-large-folder tool
4f03424 verified
Raw History Blame Contribute Delete
2.18 kB
"""Generate an RGBA image from a local Image21-MLX or original BF16 model."""
import argparse
import time
from pathlib import Path
import mlx.core as mx
from scripts.runtime import load,generate
from scripts.common import write_json
def main():
ap=argparse.ArgumentParser()
ap.add_argument('--model',type=Path,required=True)
ap.add_argument('--prompt',required=True)
ap.add_argument('--output',type=Path,required=True)
ap.add_argument('--input',nargs='+')
ap.add_argument('--seed',type=int)
ap.add_argument('--source-seed',type=int)
ap.add_argument('--steps',type=int,default=40)
ap.add_argument('--width',type=int)
ap.add_argument('--height',type=int)
ap.add_argument('--resolution',type=int,default=1024)
args=ap.parse_args()
if args.output.exists(): raise FileExistsError(args.output)
if (args.width is None)!=(args.height is None): ap.error('Set width and height together')
if args.width is None:
if args.input:
from PIL import Image
from mlx_vlm.models.qwen_image.pipeline import _image_dimensions
with Image.open(args.input[-1]) as source:
args.width,args.height=_image_dimensions(args.resolution,source.width/source.height)
else: args.width=args.height=args.resolution
seed=args.seed if args.seed is not None else (1000042 if args.input else 42)
start=time.perf_counter(); pipe=load(args.model)
load_s=time.perf_counter()-start; mx.reset_peak_memory(); start=time.perf_counter()
img=generate(pipe,args.prompt,seed=seed,steps=args.steps,width=args.width,height=args.height,
inputs=args.input,source_seed=args.source_seed,resolution=args.resolution)
seconds=time.perf_counter()-start
args.output.parent.mkdir(parents=True,exist_ok=True); img.save(args.output)
row=dict(model=str(args.model),prompt=args.prompt,seed=seed,steps=args.steps,width=args.width,height=args.height,
mode=img.mode,pipeline_init_seconds=load_s,seconds=seconds,mlx_peak_gib=mx.get_peak_memory()/2**30)
write_json(args.output.with_suffix('.json'),row); print(row,flush=True)
if __name__=='__main__': main()