File size: 8,178 Bytes
862d3ae
e288709
0a7b4e3
0b01e52
 
 
862d3ae
 
07302a5
0a7b4e3
 
 
 
 
07302a5
0a7b4e3
862d3ae
 
 
 
 
0a7b4e3
 
 
 
 
07302a5
 
0a7b4e3
1ffbc6e
07302a5
0b01e52
0a7b4e3
 
 
 
 
 
862d3ae
 
 
 
 
 
 
 
 
0b01e52
862d3ae
 
 
0a7b4e3
 
862d3ae
 
 
 
 
5aaa067
862d3ae
 
 
 
 
0a7b4e3
862d3ae
0a7b4e3
 
 
 
 
 
c67640b
 
 
862d3ae
 
0a7b4e3
1ffbc6e
 
 
0a7b4e3
 
862d3ae
 
0a7b4e3
86cd85c
1ffbc6e
86cd85c
0a7b4e3
86cd85c
 
 
1ffbc6e
 
 
0b01e52
 
 
 
0a7b4e3
1ffbc6e
86cd85c
0a7b4e3
 
 
 
86cd85c
 
0b01e52
 
 
86cd85c
 
0a7b4e3
 
 
 
 
 
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import spaces
import gradio as gr

from utils import gradio_copy_text, COPY_ACTION_JS
from tagger import (predict_tags_wd, convert_danbooru_to_e621_prompt, remove_specific_prompt,
    insert_recom_prompt, compose_prompt_to_copy, translate_prompt, select_random_character)
from fl2sd3longcap import predict_tags_fl2_sd3
from fl2basepromptgen import predict_tags_fl2_base_prompt_gen
from fl2flux import predict_tags_fl2_flux
from promptenhancer import prompt_enhancer

def description_ui():
    gr.Markdown(
        """

## Prompt Enhancer with WD Tagger & Flux/SD3 Captioner

(Image =>) Prompt => Upsampled longer prompt

"""
    )
def description_ui2():
    gr.Markdown(
        """

- It's a mod. Original Spaces: p1atdev's [WD Tagger with πŸ€— transformers](https://huggingface.co/spaces/p1atdev/wd-tagger-transformers),\

 gokaygokay's [Prompt-Enhancer](https://huggingface.co/spaces/gokaygokay/Prompt-Enhancer) /\

 [Florence-2-SD3-Captioner](https://huggingface.co/spaces/gokaygokay/Florence-2-SD3-Captioner).

- Models: p1atdev's [wd-swinv2-tagger-v3-hf](https://huggingface.co/p1atdev/wd-swinv2-tagger-v3-hf),\

 gokaygokay's [Florence-2-SD3-Captioner](https://huggingface.co/gokaygokay/Florence-2-SD3-Captioner),\

 gokaygokay's [Florence-2-Flux](https://huggingface.co/gokaygokay/Florence-2-Flux),\

 gokaygokay's [Florence-2-Flux-Large](https://huggingface.co/gokaygokay/Florence-2-Flux-Large),\

 [Lamini-Prompt-Enchance](https://huggingface.co/gokaygokay/Lamini-Prompt-Enchance),\

 [Lamini-Prompt-Enchance-Long](https://huggingface.co/gokaygokay/Lamini-Prompt-Enchance-Long),\

 [Flux-Prompt-Enhance](https://huggingface.co/gokaygokay/Flux-Prompt-Enhance),\

 MiaoshouAI's [Florence-2-large-PromptGen-v1.5](https://huggingface.co/MiaoshouAI/Florence-2-large-PromptGen-v1.5).

"""
    )

def main():
    with gr.Blocks() as ui:
        description_ui()
        with gr.Column():
            with gr.Group():
                input_image = gr.Image(label="Input image", type="pil", sources=["upload", "clipboard"], height=256)
                with gr.Accordion(label="Advanced options", open=False):
                    general_threshold = gr.Slider(label="Threshold", minimum=0.0, maximum=1.0, value=0.3, step=0.01, interactive=True)
                    character_threshold = gr.Slider(label="Character threshold", minimum=0.0, maximum=1.0, value=0.8, step=0.01, interactive=True)
                    input_tag_type = gr.Radio(label="Convert tags to", info="danbooru for Animagine, e621 for Pony.", choices=["danbooru", "e621"], value="danbooru")
                    recom_prompt = gr.Radio(label="Insert reccomended prompt", choices=["None", "Animagine", "Pony"], value="None", interactive=True)
                    keep_tags = gr.Radio(label="Remove tags leaving only the following", choices=["body", "dress", "all"], value="all")
                image_algorithms = gr.CheckboxGroup(["Use WD Tagger", "Use Florence-2-SD3-Long-Captioner", "Use Florence-2-Flux", "Use Florence-2-Flux-Large", "Use Florence-2-large-PromptGen"], label="Algorithms", value=["Use WD Tagger", "Use Florence-2-Flux"])
                generate_from_image_btn = gr.Button(value="GENERATE TAGS FROM IMAGE", size="lg", variant="primary")
            with gr.Group():
                with gr.Row():
                    input_character = gr.Textbox(label="Character tags", placeholder="hatsune miku")
                    input_copyright = gr.Textbox(label="Copyright tags", placeholder="vocaloid")
                    random_character = gr.Button(value="Random character 🎲", size="sm")
                input_general = gr.TextArea(label="General tags", lines=4, placeholder="1girl, ...", value="")
                input_tags_to_copy = gr.Textbox(value="", visible=False)
                copy_input_btn = gr.Button(value="Copy to clipboard", size="sm", interactive=False)
                translate_input_prompt_button = gr.Button(value="Translate prompt to English", size="sm", variant="secondary")
                prompt_enhancer_model = gr.Radio(["Medium", "Long", "Flux"], label="Model Choice", value="Long", info="Enhance your prompts with Medium or Long answers")
                with gr.Accordion(label="Advanced options", open=False, visible=False):
                    tag_type = gr.Radio(label="Output tag conversion", info="danbooru for Animagine, e621 for Pony.", choices=["danbooru", "e621"], value="e621", visible=False)
                    dummy_np = gr.Textbox(label="Negative prompt", value="", visible=False)
                    recom_animagine = gr.Textbox(label="Animagine reccomended prompt", value="Animagine", visible=False)
                    recom_pony = gr.Textbox(label="Pony reccomended prompt", value="Pony", visible=False)
                generate_btn = gr.Button(value="GENERATE TAGS", size="lg", variant="primary")
            with gr.Row():
                with gr.Group():
                    output_text = gr.TextArea(label="Output tags", interactive=False, show_copy_button=True)
                    copy_btn = gr.Button(value="Copy to clipboard", size="sm", interactive=False)
                with gr.Group():
                    output_text_pony = gr.TextArea(label="Output tags (Pony e621 style)", interactive=False, show_copy_button=True)
                    copy_btn_pony = gr.Button(value="Copy to clipboard", size="sm", interactive=False)
        description_ui2()
        gr.LoginButton()
        gr.DuplicateButton(value="Duplicate Space for private use")

        random_character.click(select_random_character, [input_copyright, input_character], [input_copyright, input_character], queue=False)

        translate_input_prompt_button.click(translate_prompt, [input_general], [input_general], queue=False)
        translate_input_prompt_button.click(translate_prompt, [input_character], [input_character], queue=False)
        translate_input_prompt_button.click(translate_prompt, [input_copyright], [input_copyright], queue=False)

        generate_from_image_btn.click(
            lambda: ("", "", ""), None, [input_copyright, input_character, input_general], queue=False,
        ).success(
            predict_tags_wd,
            [input_image, input_general, image_algorithms, general_threshold, character_threshold],
            [input_copyright, input_character, input_general, copy_input_btn],
        ).success(
            predict_tags_fl2_sd3,
            [input_image, input_general, image_algorithms],
            [input_general],
        ).success(
            predict_tags_fl2_base_prompt_gen,
            [input_image, input_general, image_algorithms],
            [input_general],
        ).success(predict_tags_fl2_flux, [input_image, input_general, image_algorithms], [input_general],
        ).success(remove_specific_prompt, [input_general, keep_tags], [input_general], queue=False,
        ).success(convert_danbooru_to_e621_prompt, [input_general, input_tag_type], [input_general], queue=False,
        ).success(insert_recom_prompt, [input_general, dummy_np, recom_prompt], [input_general, dummy_np], queue=False,
        )
        copy_input_btn.click(compose_prompt_to_copy, [input_character, input_copyright, input_general], [input_tags_to_copy], queue=False).success(
            gradio_copy_text, [input_tags_to_copy], js=COPY_ACTION_JS,
        )

        generate_btn.click(
            prompt_enhancer,
            [input_character, input_copyright, input_general, prompt_enhancer_model],
            [output_text, copy_btn, copy_btn_pony],
        ).success(convert_danbooru_to_e621_prompt, [output_text, tag_type], [output_text_pony], queue=False,
        ).success(insert_recom_prompt, [output_text, dummy_np, recom_animagine], [output_text, dummy_np], queue=False,
        ).success(insert_recom_prompt, [output_text_pony, dummy_np, recom_pony], [output_text_pony, dummy_np], queue=False)
        copy_btn.click(gradio_copy_text, [output_text], js=COPY_ACTION_JS)
        copy_btn_pony.click(gradio_copy_text, [output_text_pony], js=COPY_ACTION_JS)

    ui.launch()


if __name__ == "__main__":
    main()