File size: 3,593 Bytes
b197a8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# 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
        )