Spaces:
Running
on
Zero
Running
on
Zero
| import argparse | |
| from src.pipeline_pe_clone import FluxPipeline | |
| import torch | |
| from PIL import Image | |
| def parse_args(): | |
| parser = argparse.ArgumentParser(description='FLUX image generation with LoRA') | |
| parser.add_argument('--model_path', type=str, | |
| default="black-forest-labs/FLUX.1-dev", | |
| help='Path to pretrained model') | |
| parser.add_argument('--image_path', type=str, | |
| default="assets/1.png", | |
| help='Input image path') | |
| parser.add_argument('--output_path', type=str, | |
| default="output.png", | |
| help='Output image path') | |
| parser.add_argument('--height', type=int, default=768) | |
| parser.add_argument('--width', type=int, default=512) | |
| parser.add_argument('--prompt', type=str, | |
| default="add a halo and wings for the cat by sksmagiceffects", | |
| help="""Different LoRA effects and their example prompts: | |
| - sksmagiceffects: "add a halo and wings for the cat by sksmagiceffects" | |
| - sksmonstercalledlulu: "add a red sksmonstercalledlulu hugging the cat" | |
| - skspaintingeffects: "add a yellow flower on the cat's head and psychedelic colors and dynamic flows by skspaintingeffects" | |
| - sksedgeeffect: "add yellow flames to the cat by sksedgeeffect" | |
| - skscatooneffect: "add two hands holding the cat in skscatooneffect" | |
| """) | |
| parser.add_argument('--guidance_scale', type=float, default=3.5) | |
| parser.add_argument('--num_steps', type=int, default=20, | |
| help='Number of inference steps') | |
| parser.add_argument('--lora_name', type=str, | |
| choices=['pretrained', 'sksmagiceffects', 'sksmonstercalledlulu', | |
| 'skspaintingeffects', 'sksedgeeffect', 'skscatooneffect'], | |
| default="sksmagiceffects", | |
| help='Name of LoRA weights to use. Use "pretrained" for base model only') | |
| return parser.parse_args() | |
| def main(): | |
| args = parse_args() | |
| pipeline = FluxPipeline.from_pretrained( | |
| args.model_path, | |
| torch_dtype=torch.bfloat16, | |
| ).to('cuda') | |
| # Load and fuse base LoRA weights | |
| pipeline.load_lora_weights("nicolaus-huang/PhotoDoodle", weight_name="pretrain.safetensors") | |
| pipeline.fuse_lora() | |
| pipeline.unload_lora_weights() | |
| # Load selected LoRA effect only if not using pretrained | |
| if args.lora_name != 'pretrained': | |
| pipeline.load_lora_weights("nicolaus-huang/PhotoDoodle", weight_name=f"{args.lora_name}.safetensors") | |
| condition_image = Image.open(args.image_path).resize((args.height, args.width)).convert("RGB") | |
| result = pipeline( | |
| prompt=args.prompt, | |
| condition_image=condition_image, | |
| height=args.height, | |
| width=args.width, | |
| guidance_scale=args.guidance_scale, | |
| num_inference_steps=args.num_steps, | |
| max_sequence_length=512 | |
| ).images[0] | |
| result.save(args.output_path) | |
| if __name__ == "__main__": | |
| main() |