Nanny7's picture
Add HarukiMix AI Image Generator application
fda66d1
Raw
History Blame Contribute Delete
6.87 kB
#!/usr/bin/env python3
"""
HarukiMix AI Image Generator
Generates beautiful Japanese girl images using the harukimix model
"""
import gradio as gr
import torch
from diffusers import StableDiffusionXLPipeline
import os
from pathlib import Path
# Model configuration
MODEL_ID = "John6666/haruki-mix-v21-sdxl"
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
# Initialize pipeline
print(f"Loading model: {MODEL_ID}")
print(f"Using device: {DEVICE}")
try:
pipe = StableDiffusionXLPipeline.from_pretrained(
MODEL_ID,
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
use_safetensors=True,
variant="fp16" if torch.cuda.is_available() else None
)
pipe = pipe.to(DEVICE)
print("βœ“ Model loaded successfully")
except Exception as e:
print(f"Error loading model: {e}")
pipe = None
def generate_image(
prompt: str,
negative_prompt: str = "",
num_inference_steps: int = 30,
guidance_scale: float = 7.5,
height: int = 768,
width: int = 768,
seed: int = -1
) -> tuple:
"""
Generate an image using harukimix model
Args:
prompt: Text description of the image to generate
negative_prompt: Things to avoid in the image
num_inference_steps: Number of denoising steps (higher = better quality but slower)
guidance_scale: How much to follow the prompt (higher = more adherence)
height: Image height (must be multiple of 8)
width: Image width (must be multiple of 8)
seed: Random seed for reproducibility (-1 for random)
Returns:
Tuple of (image, info_text)
"""
if pipe is None:
return None, "❌ Model failed to load. Please check your GPU/CPU resources."
if not prompt.strip():
return None, "❌ Please enter a prompt"
try:
# Set seed for reproducibility
if seed >= 0:
generator = torch.Generator(device=DEVICE).manual_seed(seed)
else:
generator = None
# Generate image
with torch.no_grad():
result = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
height=height,
width=width,
num_inference_steps=num_inference_steps,
guidance_scale=guidance_scale,
generator=generator
)
image = result.images[0]
info = f"βœ“ Generated successfully!\n\nPrompt: {prompt}\nSteps: {num_inference_steps}, Scale: {guidance_scale}"
return image, info
except Exception as e:
error_msg = f"❌ Error during generation: {str(e)}"
print(error_msg)
return None, error_msg
# Create Gradio interface
with gr.Blocks(title="HarukiMix AI Image Generator", theme=gr.themes.Soft()) as demo:
gr.Markdown("""
# 🎨 HarukiMix AI Image Generator
Generate beautiful Japanese girl images using the harukimix model.
**Note:** First generation may take 30-60 seconds as the model loads.
Subsequent generations will be faster.
""")
with gr.Row():
with gr.Column(scale=2):
# Input section
prompt = gr.Textbox(
label="Prompt",
placeholder="e.g., beautiful japanese girl, long black hair, school uniform, smile, detailed face, masterpiece",
lines=3,
value="beautiful japanese girl, long black hair, school uniform, smile, detailed face, masterpiece"
)
negative_prompt = gr.Textbox(
label="Negative Prompt (what to avoid)",
placeholder="e.g., blurry, low quality, distorted, ugly",
lines=2,
value="blurry, low quality, distorted, ugly, bad anatomy"
)
with gr.Row():
num_steps = gr.Slider(
label="Inference Steps",
minimum=10,
maximum=50,
value=30,
step=1,
info="Higher = better quality but slower"
)
guidance_scale = gr.Slider(
label="Guidance Scale",
minimum=1.0,
maximum=20.0,
value=7.5,
step=0.5,
info="How much to follow the prompt"
)
with gr.Row():
height = gr.Slider(
label="Height",
minimum=512,
maximum=1024,
value=768,
step=64
)
width = gr.Slider(
label="Width",
minimum=512,
maximum=1024,
value=768,
step=64
)
seed = gr.Number(
label="Seed (-1 for random)",
value=-1,
precision=0
)
generate_btn = gr.Button("🎨 Generate Image", variant="primary", scale=2)
with gr.Column(scale=1):
# Output section
output_image = gr.Image(label="Generated Image", type="pil")
output_info = gr.Textbox(label="Status", lines=4)
# Connect button to generation function
generate_btn.click(
fn=generate_image,
inputs=[prompt, negative_prompt, num_steps, guidance_scale, height, width, seed],
outputs=[output_image, output_info]
)
# Example prompts
gr.Markdown("## πŸ“ Example Prompts")
gr.Examples(
examples=[
[
"beautiful japanese girl, long black hair, school uniform, smile, detailed face, masterpiece, best quality, 8k",
"blurry, low quality, distorted, ugly"
],
[
"cute japanese girl, pink hair, kawaii style, big eyes, happy expression, detailed, high quality",
"blurry, low quality, distorted"
],
[
"japanese woman, elegant kimono, traditional style, beautiful face, detailed, masterpiece",
"blurry, low quality, distorted, modern"
],
[
"young japanese girl, casual clothes, natural lighting, smile, realistic, detailed, high quality",
"blurry, low quality, distorted, ugly, bad anatomy"
]
],
inputs=[prompt, negative_prompt],
label="Try these prompts"
)
if __name__ == "__main__":
demo.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
show_error=True
)