Instructions to use ermu2001/ChatAnything with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use ermu2001/ChatAnything with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("ermu2001/ChatAnything", dtype=torch.bfloat16, device_map="cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
| import os | |
| from PIL import Image | |
| import torchvision.transforms.functional as f | |
| from utils import load_face_generator | |
| from omegaconf import OmegaConf | |
| import random | |
| import sys | |
| def generate_face_image( | |
| anything_facemaker, | |
| class_concept, | |
| face_img_pil=None, | |
| controlnet_conditioning_scale=1.0, | |
| strength=0.95, | |
| ): | |
| face_img_pil = f.center_crop( | |
| f.resize(face_img_pil, 512), 512).convert('RGB') | |
| prompt = anything_facemaker.prompt_template.format(class_concept) | |
| # # There are four ways to generate a image by now. | |
| # pure_generate = anything_facemaker.generate(prompt=prompt, image=face_img_pil, do_inversion=False) | |
| # inversion = anything_facemaker.generate(prompt=prompt, image=face_img_pil, strength=strength, do_inversion=True) | |
| if controlnet_conditioning_scale == None: | |
| init_face_pil = anything_facemaker.generate(prompt=prompt) | |
| return init_face_pil | |
| if strength is None: | |
| pure_control = anything_facemaker.face_control_generate(prompt=prompt, face_img_pil=face_img_pil, do_inversion=False, | |
| controlnet_conditioning_scale=controlnet_conditioning_scale) | |
| init_face_pil = pure_control | |
| else: | |
| control_inversion = anything_facemaker.face_control_generate(prompt=prompt, face_img_pil=face_img_pil, do_inversion=True, | |
| strength=strength, | |
| controlnet_conditioning_scale=controlnet_conditioning_scale) | |
| init_face_pil = control_inversion | |
| return init_face_pil | |
| def experiment(anything_facemaker, concepts_path, face_img_path, output_dir, | |
| controlnet_conditioning_scale=1., strength=0.95): | |
| os.makedirs(output_dir, exist_ok=True) | |
| face_img_pil = Image.open(face_img_path) | |
| face_img_pil = f.center_crop( | |
| f.resize(face_img_pil, 512), 512).convert('RGB') | |
| with open(concepts_path) as fr: | |
| concepts = fr.read().split('\n') | |
| concepts = [concept for concept in concepts if len(concept)!=0] | |
| random.shuffle(concepts) | |
| for concept in concepts[:4]: | |
| save_path = os.path.join(output_dir, f'{concept}.png') | |
| if os.path.exists(save_path): | |
| continue | |
| init_face_pil = generate_face_image( | |
| anything_facemaker, | |
| class_concept=concept, | |
| face_img_pil=face_img_pil, | |
| controlnet_conditioning_scale=controlnet_conditioning_scale, | |
| strength=strength, | |
| ) | |
| save_path = os.path.join(output_dir, f'{concept}.png') | |
| init_face_pil.save(save_path) | |
| if __name__=='__main__': | |
| # run this in repo path: | |
| # PYTHONPATH=.:$PYTHONPATH python experiments/experiment.py | |
| model_config_path = 'resources/models.yaml' | |
| # model_config_path = 'resources/models_personality.yaml' | |
| model_config = OmegaConf.load(model_config_path)['models'] | |
| gameicon_config = model_config['GameIconInstitute_mode'] | |
| # face_img_path = 'resources/images/faces/0.jpg' | |
| face_img_dir='resources/images/faces' | |
| faces = os.listdir(face_img_dir) | |
| controlnet_conditioning_scale=1. | |
| strength=0.95 | |
| for model, model_info in model_config.items(): | |
| anything_facemaker = load_face_generator( | |
| model_dir=model_info['model_dir'], | |
| lora_path=model_info['lora_path'], | |
| prompt_template=model_info['prompt_template'], | |
| negative_prompt=model_info['negative_prompt'] | |
| ) | |
| output_dir = os.path.join(sys.argv[1], model) | |
| os.makedirs(output_dir, exist_ok=True) | |
| # concept test, with control and inversion | |
| input_dir = 'resources/prompts' | |
| for dir, folders, files in os.walk(input_dir): | |
| for file in files: | |
| input_file = os.path.join(dir, file) | |
| file_output_dir = os.path.join(output_dir, file) | |
| print(f'input_file: {input_file}') | |
| print(f'file_output_dir: {file_output_dir}') | |
| face_img_path = os.path.join(face_img_dir, random.choice(faces)) | |
| experiment(anything_facemaker, input_file, face_img_path, output_dir=file_output_dir, | |
| controlnet_conditioning_scale=controlnet_conditioning_scale, | |
| strength=strength) | |
| # # concept, with control and inversion | |
| # experiment(anything_facemaker, 'resources/concepts.txt', face_img_path, output_dir='results/concepts/control_inversion', | |
| # controlnet_conditioning_scale=controlnet_conditioning_scale, | |
| # strength=strength) | |
| # # concept test, no control no inversion | |
| # experiment(anything_facemaker, 'resources/concepts_test.txt', face_img_path, output_dir='results/concepts_test/generate', | |
| # controlnet_conditioning_scale=None, | |
| # strength=strength) | |
| # # concept, no control no inversion | |
| # experiment(anything_facemaker, 'resources/concepts.txt', face_img_path, output_dir='results/concepts/generate', | |
| # controlnet_conditioning_scale=None, | |
| # strength=strength) |