|
|
import gradio as gr |
|
|
import sys |
|
|
import os |
|
|
|
|
|
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'dist')) |
|
|
|
|
|
|
|
|
try: |
|
|
from core_logic import ( |
|
|
generate_image_via_api_secure, |
|
|
get_available_models_secure, |
|
|
get_company_info, |
|
|
create_footer, |
|
|
get_custom_css |
|
|
) |
|
|
except ImportError as e: |
|
|
print(f"Error: Obfuscated module not found: {e}") |
|
|
print("Current directory:", os.getcwd()) |
|
|
print("Files in dist:", os.listdir('dist') if os.path.exists('dist') else 'dist not found') |
|
|
sys.exit(1) |
|
|
|
|
|
|
|
|
COMPANY_NAME = "Miragic" |
|
|
COMPANY_URL = "https://www.miragic.ai" |
|
|
CONTACT_EMAIL = "info@miragic.ai" |
|
|
COMPANY_LOGO_URL = "https://avatars.githubusercontent.com/u/211682198?s=200&v=4" |
|
|
|
|
|
def create_instructions_html(): |
|
|
"""Create instructions HTML""" |
|
|
return """ |
|
|
<div style="padding: 15px; border-radius: 8px; margin-bottom: 20px;"> |
|
|
<h2 style="margin-top: 0;">How to use:</h2> |
|
|
<ol style="color: #636e72;"> |
|
|
<li>Enter a detailed description of the image you want to generate</li> |
|
|
<li>Select a model (different models have different styles)</li> |
|
|
<li>For 'kontext' model, provide an image URL for image-to-image generation</li> |
|
|
<li>Adjust the image dimensions and other parameters</li> |
|
|
<li>Click "Generate Image" to create your AI artwork</li> |
|
|
</ol> |
|
|
<p style="margin-bottom: 0;"><strong>Tip:</strong> Be specific in your prompts for better results!</p> |
|
|
</div> |
|
|
""" |
|
|
|
|
|
|
|
|
try: |
|
|
available_models = get_available_models_secure() |
|
|
print(f"Available models: {available_models}") |
|
|
except Exception as e: |
|
|
print(f"Error getting models: {e}") |
|
|
available_models = ["flux", "turbo", "kontext"] |
|
|
|
|
|
|
|
|
with gr.Blocks(css=get_custom_css(), title=f"{COMPANY_NAME} AI Image Generator") as demo: |
|
|
with gr.Row(): |
|
|
with gr.Column(): |
|
|
gr.Markdown(f""" |
|
|
<div style="display: flex; align-items: center;"> |
|
|
<img src="{COMPANY_LOGO_URL}" style="width: 80px; height: 80px; margin-right: 20px; border-radius: 8px;"/> |
|
|
<div> |
|
|
<h1 style="margin-bottom: 0;">{COMPANY_NAME} AI Image Generator π¨</h1> |
|
|
<p style="margin-top: 0; color: #636e72;">Create stunning AI-generated images with text prompts</p> |
|
|
</div> |
|
|
</div> |
|
|
""") |
|
|
|
|
|
gr.HTML(create_instructions_html()) |
|
|
|
|
|
with gr.Row(): |
|
|
|
|
|
with gr.Column(): |
|
|
gr.HTML(""" |
|
|
<div class="step-title"> |
|
|
<span style="font-size: 24px;">1. Enter Prompt & Settings</span><br> |
|
|
</div> |
|
|
""") |
|
|
|
|
|
prompt = gr.Textbox( |
|
|
label="Prompt", |
|
|
lines=3, |
|
|
placeholder="Describe the image you want to generate...", |
|
|
value="" |
|
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
model = gr.Dropdown( |
|
|
choices=available_models, |
|
|
value="flux", |
|
|
label="Model" |
|
|
) |
|
|
seed = gr.Number( |
|
|
label="Seed", |
|
|
value=-1, |
|
|
info="-1 for random seed" |
|
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
width = gr.Slider( |
|
|
minimum=256, |
|
|
maximum=2048, |
|
|
value=1024, |
|
|
step=64, |
|
|
label="Width" |
|
|
) |
|
|
height = gr.Slider( |
|
|
minimum=256, |
|
|
maximum=2048, |
|
|
value=1024, |
|
|
step=64, |
|
|
label="Height" |
|
|
) |
|
|
|
|
|
image_url = gr.Textbox( |
|
|
label="Image URL (for kontext model only)", |
|
|
placeholder="https://example.com/image.jpg", |
|
|
info="Required for image-to-image generation with kontext model" |
|
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
enhance = gr.Checkbox(label="Enhance Prompt", value=False, info="Use AI to enhance your prompt") |
|
|
safe = gr.Checkbox(label="Safe Filter", value=False, info="Enable strict NSFW filtering") |
|
|
|
|
|
gr.HTML(""" |
|
|
<div class="kontext-notice"> |
|
|
<strong>Note:</strong> For the 'kontext' model, you must provide an Image URL for image-to-image generation. |
|
|
Example: "bake_a_cake_from_this_logo" with image URL of a logo. |
|
|
</div> |
|
|
""") |
|
|
|
|
|
generate_btn = gr.Button( |
|
|
"Generate Image π¨", |
|
|
elem_classes="button-gradient" |
|
|
) |
|
|
|
|
|
|
|
|
with gr.Column(): |
|
|
gr.HTML(""" |
|
|
<div class="step-title"> |
|
|
<span style="font-size: 24px;">2. Generated Image</span><br> |
|
|
</div> |
|
|
""") |
|
|
|
|
|
result_img = gr.Image( |
|
|
label="Generated Image", |
|
|
interactive=False, |
|
|
height=400 |
|
|
) |
|
|
|
|
|
gr.HTML(""" |
|
|
<div class="interaction-section"> |
|
|
<p style="margin: 5px 0;">If you like our AI Image Generator, please give us a β€οΈ into our space!</p> |
|
|
</div> |
|
|
""") |
|
|
|
|
|
signup_prompt = gr.HTML( |
|
|
visible=True, |
|
|
value=f"""<div class="signup-container"> |
|
|
<h3>π Want more AI tools?</h3> |
|
|
<p>Visit {COMPANY_NAME}.ai for unlimited access to all our AI tools!</p> |
|
|
<a href='{COMPANY_URL}/' target='_blank' class="signup-button"> |
|
|
Explore More Tools π |
|
|
</a> |
|
|
</div>""" |
|
|
) |
|
|
|
|
|
|
|
|
examples = [ |
|
|
["An epic fantasy landscape with floating islands, cascading waterfalls, ancient ruins, magical aurora borealis in the sky, digital painting, concept art, unreal engine 5, 4K wallpaper", "flux", 2048, 1024, -1, "", False, False], |
|
|
["A serene Japanese garden with cherry blossoms, koi pond, traditional pagoda, morning mist, sunlight filtering through trees, peaceful atmosphere, ultra detailed", "flux", 2048, 1024, -1, "", True, False], |
|
|
["bake_a_cake_from_this_logo", "kontext", 1024, 1024, -1, "https://avatars.githubusercontent.com/u/86964862", False, False], |
|
|
["A minimalist modern living room with large windows, Scandinavian design, plants, cozy atmosphere, architectural rendering", "turbo", 1024, 1024, 42, "", False, True], |
|
|
["A beautiful tropical beach with turquoise water, white sand, palm trees, sunset colors, relaxing vibe, 4K wallpaper", "turbo", 2048, 1024, -1, "", True, False], |
|
|
] |
|
|
|
|
|
gr.Examples( |
|
|
examples=examples, |
|
|
inputs=[prompt, model, width, height, seed, image_url, enhance, safe], |
|
|
outputs=[result_img], |
|
|
fn=generate_image_via_api_secure, |
|
|
cache_examples=False, |
|
|
label="Example Prompts" |
|
|
) |
|
|
|
|
|
|
|
|
generate_btn.click( |
|
|
fn=generate_image_via_api_secure, |
|
|
inputs=[prompt, model, width, height, seed, image_url, enhance, safe], |
|
|
outputs=[result_img] |
|
|
) |
|
|
|
|
|
|
|
|
gr.HTML(f'<a href="https://visitorbadge.io/status?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2F{COMPANY_NAME}-AI%2F{COMPANY_NAME}-AI-Image-Generator"><img src="https://api.visitorbadge.io/api/combined?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2F{COMPANY_NAME}-AI%2F{COMPANY_NAME}-AI-Image-Generator&label=VISITORS&labelColor=%2337d67a&countColor=%23f47373&style=plastic&labelStyle=upper" /></a>') |
|
|
|
|
|
|
|
|
gr.HTML(create_footer()) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch( |
|
|
show_api=False, |
|
|
server_name="0.0.0.0", |
|
|
server_port=7860 |
|
|
) |