Dungeon_Smasher / components /factions_deities.py
MelkortheCorrupt
D&D Character Creator and Campaign Assistant
b197a8c
raw
history blame
3.59 kB
# 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
)