Instructions to use jdopensource/JoyAI-Image-Edit-Plus-Diffusers with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use jdopensource/JoyAI-Image-Edit-Plus-Diffusers with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline from diffusers.utils import load_image # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("jdopensource/JoyAI-Image-Edit-Plus-Diffusers", dtype=torch.bfloat16, device_map="cuda") prompt = "Turn this cat into a dog" input_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png") image = pipe(image=input_image, prompt=prompt).images[0] - Notebooks
- Google Colab
- Kaggle
| """ | |
| JoyAI-Image Edit Plus — Diffusers Inference Script | |
| Multi-image instruction-guided editing: provide reference images and a text | |
| instruction to generate a new image that combines elements from the references. | |
| """ | |
| import argparse | |
| import torch | |
| from PIL import Image | |
| from diffusers import JoyImageEditPlusPipeline | |
| def parse_args(): | |
| parser = argparse.ArgumentParser(description="JoyAI-Image Edit Plus inference") | |
| parser.add_argument( | |
| "--model_path", | |
| type=str, | |
| default="jdopensource/JoyAI-Image-Edit-Plus-Diffusers", | |
| help="Path or HuggingFace repo ID of the model", | |
| ) | |
| parser.add_argument( | |
| "--images", | |
| type=str, | |
| nargs="+", | |
| required=True, | |
| help="Paths to reference images (1-6 images)", | |
| ) | |
| parser.add_argument( | |
| "--prompt", | |
| type=str, | |
| required=True, | |
| help="Text instruction for editing", | |
| ) | |
| parser.add_argument( | |
| "--negative_prompt", | |
| type=str, | |
| default="low quality, blurry, deformed", | |
| help="Negative prompt", | |
| ) | |
| parser.add_argument("--num_inference_steps", type=int, default=30) | |
| parser.add_argument("--guidance_scale", type=float, default=4.0) | |
| parser.add_argument("--seed", type=int, default=42) | |
| parser.add_argument("--output", type=str, default="output.png") | |
| return parser.parse_args() | |
| def main(): | |
| args = parse_args() | |
| pipe = JoyImageEditPlusPipeline.from_pretrained( | |
| args.model_path, | |
| torch_dtype=torch.bfloat16, | |
| ).to("cuda") | |
| images = [Image.open(p).convert("RGB") for p in args.images] | |
| target_h, target_w = pipe._get_bucket_size(images[-1]) | |
| result = pipe( | |
| images=images, | |
| prompt=args.prompt, | |
| negative_prompt=args.negative_prompt, | |
| height=target_h, | |
| width=target_w, | |
| num_inference_steps=args.num_inference_steps, | |
| guidance_scale=args.guidance_scale, | |
| generator=torch.Generator(device="cuda").manual_seed(args.seed), | |
| ) | |
| result.images[0].save(args.output) | |
| print(f"Saved to {args.output}") | |
| if __name__ == "__main__": | |
| main() | |