import spaces import gradio as gr import numpy as np import random from diffusers import StableDiffusionXLPipeline, EulerAncestralDiscreteScheduler import torch from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig import os from huggingface_hub import hf_hub_download from safetensors.torch import load_file device = "cuda" token=os.environ["TOKEN"] model_id="aipicasso/emix-1-0" scheduler = EulerAncestralDiscreteScheduler.from_pretrained(model_id,subfolder="scheduler",token=token) pipe = StableDiffusionXLPipeline.from_pretrained(model_id, scheduler=scheduler, torch_dtype=torch.bfloat16,token=token) negative_ti_file = hf_hub_download(repo_id="Aikimi/unaestheticXL_Negative_TI", filename="unaestheticXLv31.safetensors") state_dict = load_file(negative_ti_file) pipe.load_textual_inversion(state_dict["clip_g"], token="unaestheticXLv31", text_encoder=pipe.text_encoder_2, tokenizer=pipe.tokenizer_2) pipe.load_textual_inversion(state_dict["clip_l"], token="unaestheticXLv31", text_encoder=pipe.text_encoder, tokenizer=pipe.tokenizer) pipe = pipe.to(device) MODEL_NAME = "p1atdev/dart-v2-moe-sft" tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True) # trust_remote_code is required for tokenizer model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtype=torch.bfloat16) model=model.to(device) MAX_SEED = np.iinfo(np.int32).max MAX_IMAGE_SIZE = 1344 @spaces.GPU def infer(seed, randomize_seed, width, height, guidance_scale, num_inference_steps): prompt = ( f"<|bos|>" f"" f"" f"<|rating:general|><|aspect_ratio:tall|><|length:long|>" f"1girl<|identity:none|><|input_end|>" ) inputs = tokenizer(prompt, return_tensors="pt").input_ids with torch.no_grad(): outputs = model.generate( inputs.to(device), do_sample=True, temperature=1.0, top_p=1.0, top_k=100, max_new_tokens=64, num_beams=1, ) prompt=", ".join([tag for tag in tokenizer.batch_decode(outputs[0], skip_special_tokens=True) if tag.strip() != ""]) negative_prompt="unaestheticXLv31, 3d, photo, realism" if randomize_seed: seed = random.randint(0, MAX_SEED) generator = torch.Generator().manual_seed(seed) image = pipe( prompt = prompt, negative_prompt = negative_prompt, guidance_scale = guidance_scale, num_inference_steps = num_inference_steps, width = width, height = height, generator = generator ).images[0] return image, prompt css=""" #col-container { margin: 0 auto; max-width: 520px; } """ with gr.Blocks(css=css) as demo: with gr.Column(elem_id="col-container"): gr.Markdown(f""" # 著作権のないイラスト ## Anime image without copyright Generateボタンを押し、画像を生成してください。この画像がいくらきれいであろうと著作権は誰にもありません。この画像は時刻を入力とした自然現象によって作られたものです。美しいとは何でしょうか。 """) with gr.Row(): run_button = gr.Button("Generate", scale=0) result = gr.Image(label="Result", show_label=False) generated_prompt = gr.Textbox(label="Generated prompt", show_label=False, interactive=False) with gr.Accordion("Advanced Settings", open=False): seed = gr.Slider( label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, ) randomize_seed = gr.Checkbox(label="Randomize seed", value=True) with gr.Row(): width = gr.Slider( label="Width", minimum=512, maximum=MAX_IMAGE_SIZE, step=64, value=1024, ) height = gr.Slider( label="Height", minimum=512, maximum=MAX_IMAGE_SIZE, step=64, value=1024, ) with gr.Row(): guidance_scale = gr.Slider( label="Guidance scale", minimum=1.0, maximum=10.0, step=0.1, value=7.5, ) num_inference_steps = gr.Slider( label="Number of inference steps", minimum=1, maximum=30, step=1, value=20, ) run_button.click( fn = infer, inputs = [seed, randomize_seed, width, height, guidance_scale, num_inference_steps], outputs = [result,generated_prompt] ) demo.queue().launch()