Spaces:
Sleeping
Sleeping
# components/factions_deities.py | |
import gradio as gr | |
from image_utils import generate_faction_image, generate_deity_image | |
from datetime import datetime | |
import json | |
import os | |
def save_to_gallery(content_type: str, data: dict, image_path: str): | |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
os.makedirs("gallery", exist_ok=True) | |
filename = f"gallery/{content_type}_{timestamp}.json" | |
with open(filename, "w") as f: | |
json.dump({"type": content_type, "data": data, "image": image_path}, f, indent=2) | |
def faction_deity_tab(): | |
with gr.TabItem("π‘οΈ Faction & Deity Generator"): | |
with gr.Row(): | |
with gr.Column(): | |
entity_type = gr.Radio(label="Generate", choices=["Faction", "Deity"], value="Faction") | |
entity_name = gr.Textbox(label="Name", placeholder="The Silver Flame") | |
domain_or_type = gr.Textbox(label="Domain or Type", placeholder="War / Guild") | |
alignment = gr.Dropdown(label="Alignment", | |
choices=["Lawful Good", "Neutral Good", "Chaotic Good", | |
"Lawful Neutral", "True Neutral", "Chaotic Neutral", | |
"Lawful Evil", "Neutral Evil", "Chaotic Evil"], | |
value="Lawful Neutral") | |
power_level = gr.Dropdown(label="Power Level (Deity Only)", | |
choices=["Lesser", "Intermediate", "Greater", "Overgod"], | |
value="Intermediate") | |
deity_sex = gr.Radio(label="Deity Sex (if applicable)", | |
choices=["Male", "Female", "Nonbinary"], | |
value="Nonbinary") | |
gen_btn = gr.Button("π¨ Generate Image") | |
image_out = gr.Image(label="Image", height=512) | |
export_btn = gr.Button("πΎ Save to Gallery") | |
export_status = gr.Textbox(label="Export Status") | |
def build_and_generate(entity_type, name, domain_or_type, alignment, power_level, deity_sex): | |
data = { | |
"name": name or f"Unnamed {entity_type}", | |
"alignment": alignment | |
} | |
if entity_type == "Faction": | |
data["faction_type"] = domain_or_type or "Guild" | |
return generate_faction_image(data, art_style="Concept Art") | |
else: | |
data.update({ | |
"domain": domain_or_type or "War", | |
"power_level": power_level, | |
"pantheon": "Generic", | |
"sex": deity_sex | |
}) | |
return generate_deity_image(data, art_style="Concept Art") | |
gen_btn.click( | |
build_and_generate, | |
inputs=[entity_type, entity_name, domain_or_type, alignment, power_level, deity_sex], | |
outputs=image_out | |
) | |
export_btn.click( | |
lambda et, n, dt, a, pl, ds, img: save_to_gallery( | |
et.lower(), | |
{ | |
"name": n, | |
"domain_or_type": dt, | |
"alignment": a, | |
"power_level": pl if et == "Deity" else None, | |
"sex": ds if et == "Deity" else None | |
}, | |
img | |
) or "β Saved!", | |
inputs=[entity_type, entity_name, domain_or_type, alignment, power_level, deity_sex, image_out], | |
outputs=export_status | |
) | |