ruslanmv commited on
Commit
c232276
·
1 Parent(s): fba6384

First commit

Browse files
app.py CHANGED
@@ -1,64 +1,9 @@
1
- import gradio as gr
2
- from huggingface_hub import InferenceClient
3
-
4
- """
5
- For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
6
- """
7
- client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
8
-
9
-
10
- def respond(
11
- message,
12
- history: list[tuple[str, str]],
13
- system_message,
14
- max_tokens,
15
- temperature,
16
- top_p,
17
- ):
18
- messages = [{"role": "system", "content": system_message}]
19
-
20
- for val in history:
21
- if val[0]:
22
- messages.append({"role": "user", "content": val[0]})
23
- if val[1]:
24
- messages.append({"role": "assistant", "content": val[1]})
25
-
26
- messages.append({"role": "user", "content": message})
27
-
28
- response = ""
29
-
30
- for message in client.chat_completion(
31
- messages,
32
- max_tokens=max_tokens,
33
- stream=True,
34
- temperature=temperature,
35
- top_p=top_p,
36
- ):
37
- token = message.choices[0].delta.content
38
-
39
- response += token
40
- yield response
41
-
42
-
43
- """
44
- For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
45
- """
46
- demo = gr.ChatInterface(
47
- respond,
48
- additional_inputs=[
49
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
50
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
51
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
52
- gr.Slider(
53
- minimum=0.1,
54
- maximum=1.0,
55
- value=0.95,
56
- step=0.05,
57
- label="Top-p (nucleus sampling)",
58
- ),
59
- ],
60
- )
61
-
62
-
63
  if __name__ == "__main__":
64
- demo.launch()
 
 
 
 
 
1
+ # app.py
2
+ from flux_app.frontend import Frontend # Import Frontend from the package
3
+ from flux_app.backend import ModelManager
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  if __name__ == "__main__":
5
+ model_manager = ModelManager() # Initialize models (backend)
6
+ frontend = Frontend(model_manager) # Create frontend, passing the model manager
7
+ app = frontend.create_ui() # Create the Gradio app
8
+ app.queue() # Important for handling concurrency
9
+ app.launch() # Launch the app
flux_app/backend.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend.py
2
+ import torch
3
+ from diffusers import (
4
+ DiffusionPipeline,
5
+ AutoencoderTiny,
6
+ AutoencoderKL,
7
+ AutoPipelineForImage2Image,
8
+ )
9
+ from flux_app.config import DTYPE, DEVICE, BASE_MODEL, TAEF1_MODEL, MAX_SEED # Absolute import
10
+ from flux_app.utilities import calculate_shift, retrieve_timesteps, load_image_from_path, calculateDuration # Absolute import
11
+ from flux_app.lora_handling import flux_pipe_call_that_returns_an_iterable_of_images # Absolute import
12
+ import time
13
+
14
+ class ModelManager:
15
+ def __init__(self):
16
+ self.pipe = None
17
+ self.pipe_i2i = None
18
+ self.good_vae = None
19
+ self.taef1 = None
20
+ self.initialize_models()
21
+
22
+
23
+ def initialize_models(self):
24
+ """Initializes the diffusion pipelines and autoencoders."""
25
+ self.taef1 = AutoencoderTiny.from_pretrained(TAEF1_MODEL, torch_dtype=DTYPE).to(DEVICE)
26
+ self.good_vae = AutoencoderKL.from_pretrained(BASE_MODEL, subfolder="vae", torch_dtype=DTYPE).to(DEVICE)
27
+ self.pipe = DiffusionPipeline.from_pretrained(BASE_MODEL, torch_dtype=DTYPE, vae=self.taef1).to(DEVICE)
28
+ self.pipe_i2i = AutoPipelineForImage2Image.from_pretrained(
29
+ BASE_MODEL,
30
+ vae=self.good_vae,
31
+ transformer=self.pipe.transformer,
32
+ text_encoder=self.pipe.text_encoder,
33
+ tokenizer=self.pipe.tokenizer,
34
+ text_encoder_2=self.pipe.text_encoder_2,
35
+ tokenizer_2=self.pipe.tokenizer_2,
36
+ torch_dtype=DTYPE,
37
+ )
38
+ self.pipe.flux_pipe_call_that_returns_an_iterable_of_images = flux_pipe_call_that_returns_an_iterable_of_images.__get__(self.pipe)
39
+
40
+
41
+ def generate_image(self, prompt_mash, steps, seed, cfg_scale, width, height, lora_scale):
42
+ """Generates an image using the text-to-image pipeline."""
43
+ self.pipe.to(DEVICE)
44
+ generator = torch.Generator(device=DEVICE).manual_seed(seed)
45
+ with calculateDuration("Generating image"):
46
+
47
+ for img in self.pipe.flux_pipe_call_that_returns_an_iterable_of_images(
48
+ prompt=prompt_mash,
49
+ num_inference_steps=steps,
50
+ guidance_scale=cfg_scale,
51
+ width=width,
52
+ height=height,
53
+ generator=generator,
54
+ joint_attention_kwargs={"scale": lora_scale},
55
+ output_type="pil",
56
+ good_vae=self.good_vae,
57
+ ):
58
+ yield img
59
+
60
+ def generate_image_to_image(self, prompt_mash, image_input_path, image_strength, steps, cfg_scale, width, height, lora_scale, seed):
61
+ """Generates an image using the image-to-image pipeline."""
62
+ generator = torch.Generator(device=DEVICE).manual_seed(seed)
63
+ self.pipe_i2i.to(DEVICE)
64
+ image_input = load_image_from_path(image_input_path)
65
+ with calculateDuration("Generating image to image"):
66
+ final_image = self.pipe_i2i(
67
+ prompt=prompt_mash,
68
+ image=image_input,
69
+ strength=image_strength,
70
+ num_inference_steps=steps,
71
+ guidance_scale=cfg_scale,
72
+ width=width,
73
+ height=height,
74
+ generator=generator,
75
+ joint_attention_kwargs={"scale": lora_scale},
76
+ output_type="pil",
77
+ ).images[0]
78
+ return final_image
flux_app/config.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # config.py
2
+
3
+ import torch
4
+
5
+ DTYPE = torch.bfloat16
6
+ DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
7
+ BASE_MODEL = "black-forest-labs/FLUX.1-dev"
8
+ TAEF1_MODEL = "madebyollin/taef1"
9
+ MAX_SEED = 2**32 - 1
10
+
11
+ # You might want to make these configurable via environment variables:
12
+ # import os
13
+ # BASE_MODEL = os.environ.get("BASE_MODEL", "black-forest-labs/FLUX.1-dev")
14
+ # TAEF1_MODEL = os.environ.get("TAEF1_MODEL", "madebyollin/taef1")
15
+ # DEVICE = os.environ.get("DEVICE", "cuda" if torch.cuda.is_available() else "cpu")
16
+ # DTYPE = os.environ.get("DTYPE", "bfloat16") # Or "float32", "float16"
17
+ # if DTYPE == "bfloat16":
18
+ # DTYPE = torch.bfloat16
19
+ # elif DTYPE == "float16":
20
+ # DTYPE = torch.float16
21
+ # else:
22
+ # DTYPE = torch.float32
flux_app/enhance.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # flux_app/enhance.py
2
+ import time
3
+ from huggingface_hub import InferenceClient
4
+ import gradio as gr
5
+
6
+ # Initialize the inference client with the new LLM
7
+ client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
8
+
9
+ # Define the system prompt for enhancing user prompts
10
+ SYSTEM_PROMPT = (
11
+ "You are a prompt enhancer and your work is to enhance the given prompt under 100 words "
12
+ "without changing the essence, only write the enhanced prompt and nothing else."
13
+ )
14
+
15
+ def format_prompt(message):
16
+ """
17
+ Format the input message using the system prompt and a timestamp to ensure uniqueness.
18
+ """
19
+ timestamp = time.time()
20
+ formatted = (
21
+ f"<s>[INST] SYSTEM: {SYSTEM_PROMPT} [/INST]"
22
+ f"[INST] {message} {timestamp} [/INST]"
23
+ )
24
+ return formatted
25
+
26
+ def generate(message, max_new_tokens=256, temperature=0.9, top_p=0.95, repetition_penalty=1.0):
27
+ """
28
+ Generate an enhanced prompt using the new LLM.
29
+ This function yields intermediate results as they are generated.
30
+ """
31
+ temperature = float(temperature)
32
+ if temperature < 1e-2:
33
+ temperature = 1e-2
34
+ top_p = float(top_p)
35
+ generate_kwargs = {
36
+ "temperature": temperature,
37
+ "max_new_tokens": int(max_new_tokens),
38
+ "top_p": top_p,
39
+ "repetition_penalty": float(repetition_penalty),
40
+ "do_sample": True,
41
+ }
42
+ formatted_prompt = format_prompt(message)
43
+ stream = client.text_generation(
44
+ formatted_prompt,
45
+ **generate_kwargs,
46
+ stream=True,
47
+ details=True,
48
+ return_full_text=False,
49
+ )
50
+ output = ""
51
+ for response in stream:
52
+ token_text = response.token.text
53
+ output += token_text
54
+ yield output.strip('</s>')
55
+ return output.strip('</s>')
56
+
flux_app/enhance_v2.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # flux_app/enhance.py
2
+ import time
3
+ from huggingface_hub import InferenceClient
4
+ import gradio as gr
5
+
6
+ # Initialize the inference client with the new LLM
7
+ client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
8
+
9
+ # Define the system prompt for enhancing user prompts
10
+ SYSTEM_PROMPT = (
11
+ "You are a prompt enhancer and your work is to enhance the given prompt under 100 words "
12
+ "without changing the essence, only write the enhanced prompt and nothing else."
13
+ )
14
+
15
+ def format_prompt(message):
16
+ """
17
+ Format the input message using the system prompt and a timestamp to ensure uniqueness.
18
+ """
19
+ timestamp = time.time()
20
+ formatted = (
21
+ f"<s>[INST] SYSTEM: {SYSTEM_PROMPT} [/INST]"
22
+ f"[INST] {message} {timestamp} [/INST]"
23
+ )
24
+ return formatted
25
+
26
+ def generate(message, max_new_tokens=256, temperature=0.9, top_p=0.95, repetition_penalty=1.0):
27
+ """
28
+ Generate an enhanced prompt using the new LLM.
29
+ This function yields intermediate results as they are generated.
30
+ """
31
+ temperature = float(temperature)
32
+ if temperature < 1e-2:
33
+ temperature = 1e-2
34
+ top_p = float(top_p)
35
+ generate_kwargs = {
36
+ "temperature": temperature,
37
+ "max_new_tokens": int(max_new_tokens),
38
+ "top_p": top_p,
39
+ "repetition_penalty": float(repetition_penalty),
40
+ "do_sample": True,
41
+ }
42
+ formatted_prompt = format_prompt(message)
43
+ stream = client.text_generation(
44
+ formatted_prompt,
45
+ **generate_kwargs,
46
+ stream=True,
47
+ details=True,
48
+ return_full_text=False,
49
+ )
50
+ output = ""
51
+ for response in stream:
52
+ token_text = response.token.text
53
+ output += token_text
54
+ yield output.strip('</s>')
55
+ return output.strip('</s>')
flux_app/frontend.py ADDED
@@ -0,0 +1,238 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # frontend.py
2
+ import gradio as gr
3
+ import sys
4
+ import os
5
+
6
+ # Add the parent directory to sys.path
7
+ parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
8
+ sys.path.insert(0, parent_dir)
9
+ #print(sys.path) #DEBUG
10
+
11
+ from flux_app.backend import ModelManager # Absolute import
12
+ from flux_app.config import MAX_SEED # Absolute import
13
+ from flux_app.lora_handling import (
14
+ add_custom_lora, remove_custom_lora, prepare_prompt,
15
+ unload_lora_weights, load_lora_weights_into_pipeline, update_selection
16
+ )
17
+ from flux_app.utilities import randomize_seed_if_needed, calculateDuration # Absolute import
18
+ import spaces
19
+
20
+ # Import the prompt enhancer generate function from the new module
21
+ from flux_app.enhance import generate
22
+
23
+ # Dummy loras data for initial UI setup.
24
+ initial_loras = [
25
+ {"image": "placeholder.jpg", "title": "Placeholder LoRA", "repo": "placeholder/repo", "weights": None, "trigger_word": ""},
26
+ ]
27
+
28
+ class Frontend:
29
+ def __init__(self, model_manager: ModelManager):
30
+ self.model_manager = model_manager
31
+ self.loras = initial_loras
32
+ self.load_initial_loras()
33
+ self.css = self.define_css()
34
+
35
+ def define_css(self):
36
+ # A cleaner, professional CSS styling.
37
+ return '''
38
+ /* Title Styling */
39
+ #title {
40
+ text-align: center;
41
+ margin-bottom: 20px;
42
+ }
43
+ #title h1 {
44
+ font-size: 2.5rem;
45
+ margin: 0;
46
+ color: #333;
47
+ }
48
+ /* Button and Column Styling */
49
+ #gen_btn {
50
+ width: 100%;
51
+ padding: 12px;
52
+ font-weight: bold;
53
+ border-radius: 5px;
54
+ }
55
+ #gen_column {
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ }
60
+ /* Gallery and List Styling */
61
+ #gallery .grid-wrap {
62
+ margin-top: 15px;
63
+ }
64
+ #lora_list {
65
+ background-color: #f5f5f5;
66
+ padding: 10px;
67
+ border-radius: 4px;
68
+ font-size: 0.9rem;
69
+ }
70
+ .card_internal {
71
+ display: flex;
72
+ align-items: center;
73
+ height: 100px;
74
+ margin-top: 10px;
75
+ }
76
+ .card_internal img {
77
+ margin-right: 10px;
78
+ }
79
+ .styler {
80
+ --form-gap-width: 0px !important;
81
+ }
82
+ /* Progress Bar Styling */
83
+ .progress-container {
84
+ width: 100%;
85
+ height: 20px;
86
+ background-color: #e0e0e0;
87
+ border-radius: 10px;
88
+ overflow: hidden;
89
+ margin-bottom: 20px;
90
+ }
91
+ .progress-bar {
92
+ height: 100%;
93
+ background-color: #4f46e5;
94
+ transition: width 0.3s ease-in-out;
95
+ width: calc(var(--current) / var(--total) * 100%);
96
+ }
97
+ '''
98
+
99
+ def load_initial_loras(self):
100
+ try:
101
+ from flux_app.lora import loras as loras_list # Absolute import
102
+ self.loras = loras_list
103
+ except ImportError:
104
+ print("Warning: lora.py not found, using placeholder LoRAs.")
105
+ pass
106
+
107
+ @spaces.GPU(duration=100)
108
+ def run_lora(self, prompt, image_input, image_strength, cfg_scale, steps, selected_index, randomize_seed, seed, width, height, lora_scale, use_enhancer, progress=gr.Progress(track_tqdm=True)):
109
+ # If prompt enhancer is enabled, generate the enhanced prompt.
110
+ if use_enhancer:
111
+ enhanced_prompt = ""
112
+ # Generate the enhanced prompt (consume the generator to get the final result)
113
+ for chunk in generate(prompt):
114
+ enhanced_prompt = chunk
115
+ prompt_used = enhanced_prompt
116
+ else:
117
+ enhanced_prompt = ""
118
+ prompt_used = prompt
119
+
120
+ seed = randomize_seed_if_needed(randomize_seed, seed, MAX_SEED)
121
+ prompt_mash = prepare_prompt(prompt_used, selected_index, self.loras)
122
+ selected_lora = self.loras[selected_index]
123
+
124
+ unload_lora_weights(self.model_manager.pipe, self.model_manager.pipe_i2i)
125
+ pipe_to_use = self.model_manager.pipe_i2i if image_input is not None else self.model_manager.pipe
126
+ load_lora_weights_into_pipeline(pipe_to_use, selected_lora["repo"], selected_lora.get("weights"))
127
+
128
+ if image_input is not None:
129
+ final_image = self.model_manager.generate_image_to_image(
130
+ prompt_mash, image_input, image_strength, steps, cfg_scale, width, height, lora_scale, seed
131
+ )
132
+ yield final_image, seed, gr.update(visible=False), enhanced_prompt
133
+ else:
134
+ image_generator = self.model_manager.generate_image(prompt_mash, steps, seed, cfg_scale, width, height, lora_scale)
135
+ final_image = None
136
+ step_counter = 0
137
+ for image in image_generator:
138
+ step_counter += 1
139
+ final_image = image
140
+ progress_bar = f'<div class="progress-container"><div class="progress-bar" style="--current: {step_counter}; --total: {steps};"></div></div>'
141
+ yield image, seed, gr.update(value=progress_bar, visible=True), enhanced_prompt
142
+
143
+ yield final_image, seed, gr.update(value=progress_bar, visible=False), enhanced_prompt
144
+
145
+ def create_ui(self):
146
+ with gr.Blocks(theme=gr.themes.Base(), css=self.css, title="Flux LoRA Generation") as app:
147
+ title = gr.HTML(
148
+ """<h1>Flux LoRA Generation</h1>""",
149
+ elem_id="title",
150
+ )
151
+ selected_index = gr.State(None)
152
+
153
+ with gr.Row():
154
+ with gr.Column(scale=3):
155
+ prompt = gr.Textbox(label="Prompt", lines=1, placeholder="Choose the LoRA and type the prompt")
156
+ with gr.Column(scale=1, elem_id="gen_column"):
157
+ generate_button = gr.Button("Generate", variant="primary", elem_id="gen_btn")
158
+ with gr.Row():
159
+ with gr.Column():
160
+ selected_info = gr.Markdown("")
161
+ gallery = gr.Gallery(
162
+ [(item["image"], item["title"]) for item in self.loras],
163
+ label="LoRA Collection",
164
+ allow_preview=False,
165
+ columns=3,
166
+ elem_id="gallery",
167
+ show_share_button=False
168
+ )
169
+ with gr.Group():
170
+ custom_lora = gr.Textbox(label="Enter Custom LoRA", placeholder="prithivMLmods/Canopus-LoRA-Flux-Anime")
171
+ gr.Markdown("[Check the list of FLUX LoRA's](https://huggingface.co/models?other=base_model:adapter:black-forest-labs/FLUX.1-dev)", elem_id="lora_list")
172
+ custom_lora_info = gr.HTML(visible=False)
173
+ custom_lora_button = gr.Button("Remove custom LoRA", visible=False)
174
+ with gr.Column():
175
+ progress_bar = gr.Markdown(elem_id="progress", visible=False)
176
+ result = gr.Image(label="Generated Image")
177
+
178
+ with gr.Row():
179
+ with gr.Accordion("Advanced Settings", open=False):
180
+ with gr.Row():
181
+ input_image = gr.Image(label="Input image", type="filepath")
182
+ image_strength = gr.Slider(label="Denoise Strength", info="Lower means more image influence", minimum=0.1, maximum=1.0, step=0.01, value=0.75)
183
+ with gr.Column():
184
+ with gr.Row():
185
+ cfg_scale = gr.Slider(label="CFG Scale", minimum=1, maximum=20, step=0.5, value=3.5)
186
+ steps = gr.Slider(label="Steps", minimum=1, maximum=50, step=1, value=28)
187
+ with gr.Row():
188
+ width = gr.Slider(label="Width", minimum=256, maximum=1536, step=64, value=1024)
189
+ height = gr.Slider(label="Height", minimum=256, maximum=1536, step=64, value=1024)
190
+ with gr.Row():
191
+ randomize_seed = gr.Checkbox(True, label="Randomize seed")
192
+ seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, randomize=True)
193
+ lora_scale = gr.Slider(label="LoRA Scale", minimum=0, maximum=3, step=0.01, value=0.95)
194
+ # Prompt Enhancer Section
195
+ with gr.Group():
196
+ use_enhancer = gr.Checkbox(label="Use Prompt Enhancer", value=True)
197
+ show_enhanced_prompt = gr.Checkbox(label="Display Enhanced Prompt", value=False)
198
+ enhanced_prompt_box = gr.Textbox(label="Enhanced Prompt", lines=3, visible=False)
199
+
200
+ gallery.select(
201
+ update_selection,
202
+ inputs=[width, height, gr.State(self.loras)],
203
+ outputs=[prompt, selected_info, selected_index, width, height]
204
+ )
205
+ custom_lora.input(
206
+ add_custom_lora,
207
+ inputs=[custom_lora, gr.State(self.loras)],
208
+ outputs=[custom_lora_info, custom_lora_button, gallery, selected_info, selected_index, prompt]
209
+ )
210
+ custom_lora_button.click(
211
+ remove_custom_lora,
212
+ outputs=[custom_lora_info, custom_lora_button, gallery, selected_info, selected_index, custom_lora]
213
+ )
214
+
215
+ # Toggle the visibility of the enhanced prompt textbox based on the checkbox state.
216
+ show_enhanced_prompt.change(fn=lambda show: gr.update(visible=show),
217
+ inputs=show_enhanced_prompt,
218
+ outputs=enhanced_prompt_box)
219
+
220
+ gr.on(
221
+ triggers=[generate_button.click, prompt.submit],
222
+ fn=self.run_lora,
223
+ inputs=[prompt, input_image, image_strength, cfg_scale, steps, selected_index, randomize_seed, seed, width, height, lora_scale, use_enhancer],
224
+ outputs=[result, seed, progress_bar, enhanced_prompt_box]
225
+ )
226
+
227
+ # Credits section added at the bottom
228
+ with gr.Row():
229
+ gr.HTML("<div style='text-align:center; font-size:0.9em; margin-top:20px;'>Credits: <a href='https://ruslanmv.com' target='_blank'>ruslanmv.com</a></div>")
230
+
231
+ return app
232
+
233
+ if __name__ == "__main__":
234
+ model_manager = ModelManager()
235
+ frontend = Frontend(model_manager)
236
+ app = frontend.create_ui()
237
+ app.queue()
238
+ app.launch(debug=True)
flux_app/frontend_v1.py ADDED
@@ -0,0 +1,216 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # frontend.py
2
+ import gradio as gr
3
+ import sys
4
+ import os
5
+
6
+ # Add the parent directory to sys.path
7
+ parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
8
+ sys.path.insert(0, parent_dir)
9
+ #print(sys.path) #DEBUG
10
+
11
+ from flux_app.backend import ModelManager # Absolute import
12
+ from flux_app.config import MAX_SEED # Absolute import
13
+ from flux_app.lora_handling import (
14
+ add_custom_lora, remove_custom_lora, prepare_prompt,
15
+ unload_lora_weights, load_lora_weights_into_pipeline, update_selection
16
+ )
17
+ from flux_app.utilities import randomize_seed_if_needed, calculateDuration # Absolute import
18
+ import spaces
19
+
20
+
21
+ # Dummy loras data for initial UI setup.
22
+ initial_loras = [
23
+ {"image": "placeholder.jpg", "title": "Placeholder LoRA", "repo": "placeholder/repo", "weights": None, "trigger_word": ""},
24
+ ]
25
+
26
+ class Frontend:
27
+ def __init__(self, model_manager: ModelManager):
28
+ self.model_manager = model_manager
29
+ self.loras = initial_loras
30
+ self.load_initial_loras()
31
+ self.css = self.define_css()
32
+
33
+ def define_css(self):
34
+ # A cleaner, professional CSS styling.
35
+ return '''
36
+ /* Title Styling */
37
+ #title {
38
+ text-align: center;
39
+ margin-bottom: 20px;
40
+ }
41
+ #title h1 {
42
+ font-size: 2.5rem;
43
+ margin: 0;
44
+ color: #333;
45
+ }
46
+ /* Button and Column Styling */
47
+ #gen_btn {
48
+ width: 100%;
49
+ padding: 12px;
50
+ font-weight: bold;
51
+ border-radius: 5px;
52
+ }
53
+ #gen_column {
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ }
58
+ /* Gallery and List Styling */
59
+ #gallery .grid-wrap {
60
+ margin-top: 15px;
61
+ }
62
+ #lora_list {
63
+ background-color: #f5f5f5;
64
+ padding: 10px;
65
+ border-radius: 4px;
66
+ font-size: 0.9rem;
67
+ }
68
+ .card_internal {
69
+ display: flex;
70
+ align-items: center;
71
+ height: 100px;
72
+ margin-top: 10px;
73
+ }
74
+ .card_internal img {
75
+ margin-right: 10px;
76
+ }
77
+ .styler {
78
+ --form-gap-width: 0px !important;
79
+ }
80
+ /* Progress Bar Styling */
81
+ .progress-container {
82
+ width: 100%;
83
+ height: 20px;
84
+ background-color: #e0e0e0;
85
+ border-radius: 10px;
86
+ overflow: hidden;
87
+ margin-bottom: 20px;
88
+ }
89
+ .progress-bar {
90
+ height: 100%;
91
+ background-color: #4f46e5;
92
+ transition: width 0.3s ease-in-out;
93
+ width: calc(var(--current) / var(--total) * 100%);
94
+ }
95
+ '''
96
+
97
+ def load_initial_loras(self):
98
+ try:
99
+ from flux_app.lora import loras as loras_list # Absolute import
100
+ self.loras = loras_list
101
+ except ImportError:
102
+ print("Warning: lora.py not found, using placeholder LoRAs.")
103
+ pass
104
+
105
+ @spaces.GPU(duration=100)
106
+ def run_lora(self, prompt, image_input, image_strength, cfg_scale, steps, selected_index, randomize_seed, seed, width, height, lora_scale, progress=gr.Progress(track_tqdm=True)):
107
+ seed = randomize_seed_if_needed(randomize_seed, seed, MAX_SEED)
108
+ prompt_mash = prepare_prompt(prompt, selected_index, self.loras)
109
+ selected_lora = self.loras[selected_index]
110
+
111
+ unload_lora_weights(self.model_manager.pipe, self.model_manager.pipe_i2i)
112
+ pipe_to_use = self.model_manager.pipe_i2i if image_input is not None else self.model_manager.pipe
113
+ load_lora_weights_into_pipeline(pipe_to_use, selected_lora["repo"], selected_lora.get("weights"))
114
+
115
+ if image_input is not None:
116
+ final_image = self.model_manager.generate_image_to_image(
117
+ prompt_mash, image_input, image_strength, steps, cfg_scale, width, height, lora_scale, seed
118
+ )
119
+ yield final_image, seed, gr.update(visible=False)
120
+ else:
121
+ image_generator = self.model_manager.generate_image(prompt_mash, steps, seed, cfg_scale, width, height, lora_scale)
122
+ final_image = None
123
+ step_counter = 0
124
+ for image in image_generator:
125
+ step_counter += 1
126
+ final_image = image
127
+ progress_bar = f'<div class="progress-container"><div class="progress-bar" style="--current: {step_counter}; --total: {steps};"></div></div>'
128
+ yield image, seed, gr.update(value=progress_bar, visible=True)
129
+
130
+ yield final_image, seed, gr.update(value=progress_bar, visible=False)
131
+
132
+ def create_ui(self):
133
+ # Using a base theme for a clean and professional look.
134
+ with gr.Blocks(theme=gr.themes.Base(), css=self.css, title="Flux LoRA Generation") as app:
135
+ title = gr.HTML(
136
+ """<h1>Flux LoRA Generation</h1>""",
137
+ elem_id="title",
138
+ )
139
+ selected_index = gr.State(None)
140
+
141
+ with gr.Row():
142
+ with gr.Column(scale=3):
143
+ prompt = gr.Textbox(label="Prompt", lines=1, placeholder="Choose the LoRA and type the prompt")
144
+ with gr.Column(scale=1, elem_id="gen_column"):
145
+ generate_button = gr.Button("Generate", variant="primary", elem_id="gen_btn")
146
+ with gr.Row():
147
+ with gr.Column():
148
+ selected_info = gr.Markdown("")
149
+ gallery = gr.Gallery(
150
+ [(item["image"], item["title"]) for item in self.loras],
151
+ label="LoRA Collection",
152
+ allow_preview=False,
153
+ columns=3,
154
+ elem_id="gallery",
155
+ show_share_button=False
156
+ )
157
+ with gr.Group():
158
+ custom_lora = gr.Textbox(label="Enter Custom LoRA", placeholder="prithivMLmods/Canopus-LoRA-Flux-Anime")
159
+ gr.Markdown("[Check the list of FLUX LoRA's](https://huggingface.co/models?other=base_model:adapter:black-forest-labs/FLUX.1-dev)", elem_id="lora_list")
160
+ custom_lora_info = gr.HTML(visible=False)
161
+ custom_lora_button = gr.Button("Remove custom LoRA", visible=False)
162
+ with gr.Column():
163
+ progress_bar = gr.Markdown(elem_id="progress", visible=False)
164
+ result = gr.Image(label="Generated Image")
165
+
166
+ with gr.Row():
167
+ with gr.Accordion("Advanced Settings", open=False):
168
+ with gr.Row():
169
+ input_image = gr.Image(label="Input image", type="filepath")
170
+ image_strength = gr.Slider(label="Denoise Strength", info="Lower means more image influence", minimum=0.1, maximum=1.0, step=0.01, value=0.75)
171
+ with gr.Column():
172
+ with gr.Row():
173
+ cfg_scale = gr.Slider(label="CFG Scale", minimum=1, maximum=20, step=0.5, value=3.5)
174
+ steps = gr.Slider(label="Steps", minimum=1, maximum=50, step=1, value=28)
175
+ with gr.Row():
176
+ width = gr.Slider(label="Width", minimum=256, maximum=1536, step=64, value=1024)
177
+ height = gr.Slider(label="Height", minimum=256, maximum=1536, step=64, value=1024)
178
+ with gr.Row():
179
+ randomize_seed = gr.Checkbox(True, label="Randomize seed")
180
+ seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, randomize=True)
181
+ lora_scale = gr.Slider(label="LoRA Scale", minimum=0, maximum=3, step=0.01, value=0.95)
182
+
183
+ gallery.select(
184
+ update_selection,
185
+ inputs=[width, height, gr.State(self.loras)],
186
+ outputs=[prompt, selected_info, selected_index, width, height]
187
+ )
188
+ custom_lora.input(
189
+ add_custom_lora,
190
+ inputs=[custom_lora, gr.State(self.loras)],
191
+ outputs=[custom_lora_info, custom_lora_button, gallery, selected_info, selected_index, prompt]
192
+ )
193
+ custom_lora_button.click(
194
+ remove_custom_lora,
195
+ outputs=[custom_lora_info, custom_lora_button, gallery, selected_info, selected_index, custom_lora]
196
+ )
197
+
198
+ gr.on(
199
+ triggers=[generate_button.click, prompt.submit],
200
+ fn=self.run_lora,
201
+ inputs=[prompt, input_image, image_strength, cfg_scale, steps, selected_index, randomize_seed, seed, width, height, lora_scale],
202
+ outputs=[result, seed, progress_bar]
203
+ )
204
+
205
+ # Credits section added at the bottom
206
+ with gr.Row():
207
+ gr.HTML("<div style='text-align:center; font-size:0.9em; margin-top:20px;'>Credits: <a href='https://ruslanmv.com' target='_blank'>ruslanmv.com</a></div>")
208
+
209
+ return app
210
+
211
+ if __name__ == "__main__":
212
+ model_manager = ModelManager()
213
+ frontend = Frontend(model_manager)
214
+ app = frontend.create_ui()
215
+ app.queue()
216
+ app.launch()
flux_app/frontend_v2.py ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # frontend.py
2
+ import gradio as gr
3
+ import sys
4
+ import os
5
+
6
+ # Add the parent directory to sys.path
7
+ parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
8
+ sys.path.insert(0, parent_dir)
9
+ #print(sys.path) #DEBUG
10
+
11
+ from flux_app.backend import ModelManager # Absolute import
12
+ from flux_app.config import MAX_SEED # Absolute import
13
+ from flux_app.lora_handling import (
14
+ add_custom_lora, remove_custom_lora, prepare_prompt,
15
+ unload_lora_weights, load_lora_weights_into_pipeline, update_selection
16
+ )
17
+ from flux_app.utilities import randomize_seed_if_needed, calculateDuration # Absolute import
18
+ import spaces
19
+ # Import the prompt enhancer function
20
+ from flux_app.enhance import generate as enhance_generate
21
+
22
+ # Dummy loras data for initial UI setup.
23
+ initial_loras = [
24
+ {"image": "placeholder.jpg", "title": "Placeholder LoRA", "repo": "placeholder/repo", "weights": None, "trigger_word": ""},
25
+ ]
26
+
27
+ class Frontend:
28
+ def __init__(self, model_manager: ModelManager):
29
+ self.model_manager = model_manager
30
+ self.loras = initial_loras
31
+ self.load_initial_loras()
32
+ self.css = self.define_css()
33
+
34
+ def define_css(self):
35
+ # A cleaner, professional CSS styling.
36
+ return '''
37
+ /* Title Styling */
38
+ #title {
39
+ text-align: center;
40
+ margin-bottom: 20px;
41
+ }
42
+ #title h1 {
43
+ font-size: 2.5rem;
44
+ margin: 0;
45
+ color: #333;
46
+ }
47
+ /* Button and Column Styling */
48
+ #gen_btn {
49
+ width: 100%;
50
+ padding: 12px;
51
+ font-weight: bold;
52
+ border-radius: 5px;
53
+ }
54
+ #gen_column {
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ }
59
+ /* Gallery and List Styling */
60
+ #gallery .grid-wrap {
61
+ margin-top: 15px;
62
+ }
63
+ #lora_list {
64
+ background-color: #f5f5f5;
65
+ padding: 10px;
66
+ border-radius: 4px;
67
+ font-size: 0.9rem;
68
+ }
69
+ .card_internal {
70
+ display: flex;
71
+ align-items: center;
72
+ height: 100px;
73
+ margin-top: 10px;
74
+ }
75
+ .card_internal img {
76
+ margin-right: 10px;
77
+ }
78
+ .styler {
79
+ --form-gap-width: 0px !important;
80
+ }
81
+ /* Progress Bar Styling */
82
+ .progress-container {
83
+ width: 100%;
84
+ height: 20px;
85
+ background-color: #e0e0e0;
86
+ border-radius: 10px;
87
+ overflow: hidden;
88
+ margin-bottom: 20px;
89
+ }
90
+ .progress-bar {
91
+ height: 100%;
92
+ background-color: #4f46e5;
93
+ transition: width 0.3s ease-in-out;
94
+ width: calc(var(--current) / var(--total) * 100%);
95
+ }
96
+ '''
97
+
98
+ def load_initial_loras(self):
99
+ try:
100
+ from flux_app.lora import loras as loras_list # Absolute import
101
+ self.loras = loras_list
102
+ except ImportError:
103
+ print("Warning: lora.py not found, using placeholder LoRAs.")
104
+ pass
105
+
106
+ @spaces.GPU(duration=100)
107
+ def run_lora(self, prompt, image_input, image_strength, cfg_scale, steps, selected_index,
108
+ randomize_seed, seed, width, height, lora_scale, use_enhancer,
109
+ progress=gr.Progress(track_tqdm=True)):
110
+ seed = randomize_seed_if_needed(randomize_seed, seed, MAX_SEED)
111
+ # Prepare the initial prompt (using LoRA info if needed)
112
+ prompt_mash = prepare_prompt(prompt, selected_index, self.loras)
113
+ enhanced_text = ""
114
+
115
+ # If prompt enhancer is enabled, first run it to improve the prompt.
116
+ if use_enhancer:
117
+ # Stream the enhanced prompt (this will update the enhanced prompt textbox)
118
+ for enhanced_chunk in enhance_generate(prompt_mash):
119
+ enhanced_text = enhanced_chunk
120
+ # Yield an update with no image yet and the current enhanced prompt.
121
+ yield None, seed, gr.update(visible=False), enhanced_text
122
+ # Use the final enhanced prompt as the prompt for image generation.
123
+ prompt_mash = enhanced_text
124
+ else:
125
+ # Ensure the enhanced prompt textbox remains cleared.
126
+ enhanced_text = ""
127
+
128
+ # Continue with the image generation process.
129
+ selected_lora = self.loras[selected_index]
130
+ unload_lora_weights(self.model_manager.pipe, self.model_manager.pipe_i2i)
131
+ pipe_to_use = self.model_manager.pipe_i2i if image_input is not None else self.model_manager.pipe
132
+ load_lora_weights_into_pipeline(pipe_to_use, selected_lora["repo"], selected_lora.get("weights"))
133
+
134
+ if image_input is not None:
135
+ final_image = self.model_manager.generate_image_to_image(
136
+ prompt_mash, image_input, image_strength, steps, cfg_scale, width, height, lora_scale, seed
137
+ )
138
+ yield final_image, seed, gr.update(visible=False), enhanced_text
139
+ else:
140
+ image_generator = self.model_manager.generate_image(prompt_mash, steps, seed, cfg_scale, width, height, lora_scale)
141
+ final_image = None
142
+ step_counter = 0
143
+ for image in image_generator:
144
+ step_counter += 1
145
+ final_image = image
146
+ progress_bar = f'<div class="progress-container"><div class="progress-bar" style="--current: {step_counter}; --total: {steps};"></div></div>'
147
+ yield image, seed, gr.update(value=progress_bar, visible=True), enhanced_text
148
+
149
+ yield final_image, seed, gr.update(value=progress_bar, visible=False), enhanced_text
150
+
151
+ def create_ui(self):
152
+ # Using a base theme for a clean and professional look.
153
+ with gr.Blocks(theme=gr.themes.Base(), css=self.css, title="Flux LoRA Generation") as app:
154
+ title = gr.HTML(
155
+ """<h1>Flux LoRA Generation</h1>""",
156
+ elem_id="title",
157
+ )
158
+ selected_index = gr.State(None)
159
+
160
+ with gr.Row():
161
+ with gr.Column(scale=3):
162
+ prompt = gr.Textbox(label="Prompt", lines=1, placeholder="Choose the LoRA and type the prompt")
163
+ with gr.Column(scale=1, elem_id="gen_column"):
164
+ generate_button = gr.Button("Generate", variant="primary", elem_id="gen_btn")
165
+ with gr.Row():
166
+ with gr.Column():
167
+ selected_info = gr.Markdown("")
168
+ gallery = gr.Gallery(
169
+ [(item["image"], item["title"]) for item in self.loras],
170
+ label="LoRA Collection",
171
+ allow_preview=False,
172
+ columns=3,
173
+ elem_id="gallery",
174
+ show_share_button=False
175
+ )
176
+ with gr.Group():
177
+ custom_lora = gr.Textbox(label="Enter Custom LoRA", placeholder="prithivMLmods/Canopus-LoRA-Flux-Anime")
178
+ gr.Markdown("[Check the list of FLUX LoRA's](https://huggingface.co/models?other=base_model:adapter:black-forest-labs/FLUX.1-dev)", elem_id="lora_list")
179
+ custom_lora_info = gr.HTML(visible=False)
180
+ custom_lora_button = gr.Button("Remove custom LoRA", visible=False)
181
+ with gr.Column():
182
+ progress_bar = gr.Markdown(elem_id="progress", visible=False)
183
+ result = gr.Image(label="Generated Image")
184
+
185
+ with gr.Row():
186
+ with gr.Accordion("Advanced Settings", open=False):
187
+ with gr.Row():
188
+ input_image = gr.Image(label="Input image", type="filepath")
189
+ image_strength = gr.Slider(label="Denoise Strength", info="Lower means more image influence", minimum=0.1, maximum=1.0, step=0.01, value=0.75)
190
+ with gr.Column():
191
+ with gr.Row():
192
+ cfg_scale = gr.Slider(label="CFG Scale", minimum=1, maximum=20, step=0.5, value=3.5)
193
+ steps = gr.Slider(label="Steps", minimum=1, maximum=50, step=1, value=28)
194
+ with gr.Row():
195
+ width = gr.Slider(label="Width", minimum=256, maximum=1536, step=64, value=1024)
196
+ height = gr.Slider(label="Height", minimum=256, maximum=1536, step=64, value=1024)
197
+ with gr.Row():
198
+ randomize_seed = gr.Checkbox(True, label="Randomize seed")
199
+ seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, randomize=True)
200
+ lora_scale = gr.Slider(label="LoRA Scale", minimum=0, maximum=3, step=0.01, value=0.95)
201
+ with gr.Row():
202
+ use_enhancer = gr.Checkbox(value=False, label="Use Prompt Enhancer")
203
+ show_enhanced_prompt = gr.Checkbox(value=False, label="Display Enhanced Prompt")
204
+ # Enhanced prompt textbox (hidden by default)
205
+ enhanced_prompt_box = gr.Textbox(label="Enhanced Prompt", visible=False)
206
+
207
+ gallery.select(
208
+ update_selection,
209
+ inputs=[width, height, gr.State(self.loras)],
210
+ outputs=[prompt, selected_info, selected_index, width, height]
211
+ )
212
+ custom_lora.input(
213
+ add_custom_lora,
214
+ inputs=[custom_lora, gr.State(self.loras)],
215
+ outputs=[custom_lora_info, custom_lora_button, gallery, selected_info, selected_index, prompt]
216
+ )
217
+ custom_lora_button.click(
218
+ remove_custom_lora,
219
+ outputs=[custom_lora_info, custom_lora_button, gallery, selected_info, selected_index, custom_lora]
220
+ )
221
+
222
+ # Toggle the visibility of the enhanced prompt textbox based on the checkbox state.
223
+ show_enhanced_prompt.change(fn=lambda show: gr.update(visible=show),
224
+ inputs=show_enhanced_prompt,
225
+ outputs=enhanced_prompt_box)
226
+
227
+ gr.on(
228
+ triggers=[generate_button.click, prompt.submit],
229
+ fn=self.run_lora,
230
+ inputs=[prompt, input_image, image_strength, cfg_scale, steps, selected_index,
231
+ randomize_seed, seed, width, height, lora_scale, use_enhancer],
232
+ outputs=[result, seed, progress_bar, enhanced_prompt_box]
233
+ )
234
+
235
+ # Credits section added at the bottom
236
+ with gr.Row():
237
+ gr.HTML("<div style='text-align:center; font-size:0.9em; margin-top:20px;'>Credits: <a href='https://ruslanmv.com' target='_blank'>ruslanmv.com</a></div>")
238
+
239
+ return app
240
+
241
+ if __name__ == "__main__":
242
+ model_manager = ModelManager()
243
+ frontend = Frontend(model_manager)
244
+ app = frontend.create_ui()
245
+ app.queue()
246
+ app.launch()
flux_app/lora.py ADDED
@@ -0,0 +1,1900 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #------------------------------------------------------------------------------------------------------------------------------------------------------------#
2
+ loras = [
3
+ #Super-Realism
4
+ {
5
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Realism-LoRA/resolve/main/images/1.png",
6
+ "title": "Super Realism",
7
+ "repo": "strangerzonehf/Flux-Super-Realism-LoRA",
8
+ "weights": "super-realism.safetensors",
9
+ "trigger_word": "Super Realism"
10
+ },
11
+ #Dalle-Mix
12
+ {
13
+ "image": "https://huggingface.co/prithivMLmods/Flux-Dalle-Mix-LoRA/resolve/main/images/D3.png",
14
+ "title": "Dalle Mix",
15
+ "repo": "prithivMLmods/Flux-Dalle-Mix-LoRA",
16
+ "weights": "dalle-mix.safetensors",
17
+ "trigger_word": "dalle-mix"
18
+ },
19
+ #Datou1111/shou_xin
20
+ {
21
+ "image": "https://huggingface.co/strangerzonehf/Flux-Ultimate-LoRA-Collection/resolve/main/images/example_aqz3dv60n.jpeg",
22
+ "title": "SHOU_XIN",
23
+ "repo": "Datou1111/shou_xin",
24
+ "weights": "shou_xin.safetensors",
25
+ "trigger_word": "shou_xin, pencil sketch"
26
+ },
27
+ #smudge
28
+ {
29
+ "image": "https://huggingface.co/strangerzonehf/Flux-Sketch-Smudge-LoRA/resolve/main/images/5.png",
30
+ "title": "Sketch_Smudge",
31
+ "repo": "strangerzonehf/Flux-Sketch-Smudge-LoRA",
32
+ "weights": "Sketch-Smudge.safetensors",
33
+ "trigger_word": " Sketch Smudge"
34
+ },
35
+ #anime-v1
36
+ {
37
+ "image": "https://huggingface.co/strangerzonehf/Flux-Animeo-v1-LoRA/resolve/main/images/A4.png",
38
+ "title": "Animeo Mix",
39
+ "repo": "strangerzonehf/Flux-Animeo-v1-LoRA",
40
+ "weights": "Animeo.safetensors",
41
+ "trigger_word": "Animeo"
42
+ },
43
+ #anime-v2
44
+ {
45
+ "image": "https://huggingface.co/strangerzonehf/Flux-Animex-v2-LoRA/resolve/main/images/A33.png",
46
+ "title": "Animex Mix",
47
+ "repo": "strangerzonehf/Flux-Animex-v2-LoRA",
48
+ "weights": "Animex.safetensors",
49
+ "trigger_word": "Animex"
50
+ },
51
+ #Super Portrait
52
+ {
53
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Portrait-LoRA/resolve/main/images/3.png",
54
+ "title": "Super Portraits",
55
+ "repo": "strangerzonehf/Flux-Super-Portrait-LoRA",
56
+ "weights": "Super-Portrait.safetensors",
57
+ "trigger_word": "Super Portrait"
58
+ },
59
+ #Super-Blend
60
+ {
61
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Blend-LoRA/resolve/main/images/SB1.png",
62
+ "title": "Super Blend",
63
+ "repo": "strangerzonehf/Flux-Super-Blend-LoRA",
64
+ "weights": "Super-Blend.safetensors",
65
+ "trigger_word": "Super Blend"
66
+ },
67
+ #3DXL P@1
68
+ {
69
+ "image": "https://huggingface.co/strangerzonehf/Flux-3DXL-Partfile-0001/resolve/main/images/4.png",
70
+ "title": "3DXLP1",
71
+ "repo": "strangerzonehf/Flux-3DXL-Partfile-0001",
72
+ "weights": "3DXLP1.safetensors",
73
+ "trigger_word": "3DXLP1"
74
+ },
75
+ #Mixer2.0
76
+ {
77
+ "image": "https://huggingface.co/strangerzonehf/Flux-Midjourney-Mix2-LoRA/resolve/main/images/3.png",
78
+ "title": "Midjourney Mix 2",
79
+ "repo": "strangerzonehf/Flux-Midjourney-Mix2-LoRA",
80
+ "weights": "mjV6.safetensors",
81
+ "trigger_word": "MJ v6"
82
+ },
83
+ {
84
+ "image": "https://huggingface.co/prithivMLmods/Flux-Long-Toon-LoRA/resolve/main/images/LT5.png",
85
+ "title": "Long Toons",
86
+ "repo": "prithivMLmods/Flux-Long-Toon-LoRA",
87
+ "weights": "Long-Toon.safetensors",
88
+ "trigger_word": "Long toons"
89
+ },
90
+ {
91
+ "image": "https://huggingface.co/strangerzonehf/Flux-Cute-3D-Kawaii-LoRA/resolve/main/images/CK3.png",
92
+ "title": "Cute 3D Kawaii",
93
+ "repo": "strangerzonehf/Flux-Cute-3D-Kawaii-LoRA",
94
+ "weights": "Cute-3d-Kawaii.safetensors",
95
+ "trigger_word": "Cute 3d Kawaii"
96
+ },
97
+
98
+ {
99
+ "image": "https://huggingface.co/strangerzonehf/Flux-Isometric-3D-LoRA/resolve/main/images/ID2.png",
100
+ "title": "Isometric 3D",
101
+ "repo": "strangerzonehf/Flux-Isometric-3D-LoRA",
102
+ "weights": "Isometric-3D.safetensors",
103
+ "trigger_word": "Isometric 3D"
104
+ },
105
+ {
106
+ "image": "https://huggingface.co/prithivMLmods/Flux-Toonic-2.5D-LoRA/resolve/main/images/T2.png",
107
+ "title": "Toon 2.5D",
108
+ "repo": "prithivMLmods/Flux-Toonic-2.5D-LoRA",
109
+ "weights": "toonic2.5D.safetensors",
110
+ "trigger_word": "toonic 2.5D"
111
+ },
112
+ {
113
+ "image": "https://huggingface.co/strangerzonehf/Flux-YWL-Realism-LoRA/resolve/main/images/R3.png",
114
+ "title": "YWL Realism",
115
+ "repo": "strangerzonehf/Flux-YWL-Realism-LoRA",
116
+ "weights": "ywl-realism.safetensors",
117
+ "trigger_word": "ylw realism"
118
+ },
119
+ #chill-guy
120
+ {
121
+ "image": "https://huggingface.co/prithivMLmods/Flux-Chill-Guy-Zone/resolve/main/images/8.png",
122
+ "title": "Chill Guy",
123
+ "repo": "prithivMLmods/Flux-Chill-Guy-Zone",
124
+ "weights": "chill-guy.safetensors",
125
+ "trigger_word": "chill guy"
126
+ },
127
+ {
128
+ "image": "https://huggingface.co/p1atdev/flux.1-schnell-pvc-style-lora/resolve/main/images/flux_lora_00221_.png",
129
+ "title": "Anime PVC Style",
130
+ "repo": "p1atdev/flux.1-schnell-pvc-style-lora",
131
+ "weights": "pvc-shnell-7250+7500.safetensors",
132
+ "trigger_word": "pvc figure, nendoroid, figma"
133
+ },
134
+ {
135
+ "image": "https://huggingface.co/strangerzonehf/Flux-C4C-Design-LoRA/resolve/main/images/4.png",
136
+ "title": "Smiley C4C",
137
+ "repo": "strangerzonehf/Flux-C4C-Design-LoRA",
138
+ "weights": "Smiley-C4C.safetensors",
139
+ "trigger_word": "Smiley C4C"
140
+ },
141
+ #-----------------------------------------------------------------------------------LoRA's----------------------------------------------------------------------#
142
+ #0
143
+ {
144
+ "image": "https://huggingface.co/prithivMLmods/Purple-Dreamy-Flux-LoRA/resolve/main/images/PD3.png",
145
+ "title": "Purple Dream",
146
+ "repo": "prithivMLmods/Purple-Dreamy-Flux-LoRA",
147
+ "weights": "Purple-Dreamy.safetensors",
148
+ "trigger_word": "Purple Dreamy"
149
+ },
150
+ #1
151
+ {
152
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism/resolve/main/images/11.png",
153
+ "title": "Flux Face Realism",
154
+ "repo": "prithivMLmods/Canopus-LoRA-Flux-FaceRealism",
155
+ "trigger_word": "Realism"
156
+ },
157
+ #2
158
+ {
159
+ "image": "https://huggingface.co/alvdansen/softserve_anime/resolve/main/images/ComfyUI_00134_.png",
160
+ "title": "Softserve Anime",
161
+ "repo": "alvdansen/softserve_anime",
162
+ "trigger_word": "sftsrv style illustration"
163
+ },
164
+ #3
165
+ {
166
+ "image": "https://huggingface.co/prithivMLmods/Fashion-Hut-Modeling-LoRA/resolve/main/images/MO1.png",
167
+ "title": "Modeling Hut",
168
+ "repo": "prithivMLmods/Fashion-Hut-Modeling-LoRA",
169
+ "trigger_word": "Modeling of"
170
+ },
171
+ #4
172
+ {
173
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-One-Click-Creative-Template/resolve/main/images/f2cc649985648e57b9b9b14ca7a8744ac8e50d75b3a334ed4df0f368.jpg",
174
+ "title": "Creative Template",
175
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-One-Click-Creative-Template",
176
+ "trigger_word": "The background is 4 real photos, and in the middle is a cartoon picture summarizing the real photos."
177
+ },
178
+ #5
179
+ {
180
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0/resolve/main/images/XX.png",
181
+ "title": "Ultra Realism",
182
+ "repo": "prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0",
183
+ "trigger_word": "Ultra realistic"
184
+ },
185
+ #6
186
+ {
187
+ "image": "https://huggingface.co/gokaygokay/Flux-Game-Assets-LoRA-v2/resolve/main/images/example_y2bqpuphc.png",
188
+ "title": "Game Assets",
189
+ "repo": "gokaygokay/Flux-Game-Assets-LoRA-v2",
190
+ "trigger_word": "wbgmsst, white background"
191
+ },
192
+ #7
193
+ {
194
+ "image": "https://huggingface.co/alvdansen/softpasty-flux-dev/resolve/main/images/ComfyUI_00814_%20(2).png",
195
+ "title": "Softpasty",
196
+ "repo": "alvdansen/softpasty-flux-dev",
197
+ "trigger_word": "araminta_illus illustration style"
198
+ },
199
+ #8
200
+ {
201
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-add-details/resolve/main/images/0.png",
202
+ "title": "Details Add",
203
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-add-details",
204
+ "trigger_word": ""
205
+ },
206
+ #9
207
+ {
208
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Anime/resolve/main/assets/4.png",
209
+ "title": "Flux Anime",
210
+ "repo": "prithivMLmods/Canopus-LoRA-Flux-Anime",
211
+ "trigger_word": "Anime"
212
+ },
213
+ #10
214
+ {
215
+ "image": "https://huggingface.co/aleksa-codes/flux-ghibsky-illustration/resolve/main/images/example5.jpg",
216
+ "title": "Ghibsky Illustration",
217
+ "repo": "aleksa-codes/flux-ghibsky-illustration",
218
+ "trigger_word": "GHIBSKY style painting"
219
+ },
220
+ #11
221
+ {
222
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Dark-Fantasy/resolve/main/images/c2215bd73da9f14fcd63cc93350e66e2901bdafa6fb8abaaa2c32a1b.jpg",
223
+ "title": "Dark Fantasy",
224
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Dark-Fantasy",
225
+ "trigger_word": ""
226
+ },
227
+ #12
228
+ {
229
+ "image": "https://huggingface.co/Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style/resolve/main/d13591878d5043f3989dd6eb1c25b710_233c18effb4b491cb467ca31c97e90b5.png",
230
+ "title": "Paper Cutout",
231
+ "repo": "Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style",
232
+ "trigger_word": "Paper Cutout Style"
233
+ },
234
+ #13
235
+ {
236
+ "image": "https://huggingface.co/alvdansen/mooniverse/resolve/main/images/out-0%20(17).webp",
237
+ "title": "Mooniverse",
238
+ "repo": "alvdansen/mooniverse",
239
+ "trigger_word": "surreal style"
240
+ },
241
+ #14
242
+ {
243
+ "image": "https://huggingface.co/alvdansen/pola-photo-flux/resolve/main/images/out-0%20-%202024-09-22T130819.351.webp",
244
+ "title": "Pola Photo",
245
+ "repo": "alvdansen/pola-photo-flux",
246
+ "trigger_word": "polaroid style"
247
+ },
248
+ #15
249
+ {
250
+ "image": "https://huggingface.co/multimodalart/flux-tarot-v1/resolve/main/images/7e180627edd846e899b6cd307339140d_5b2a09f0842c476b83b6bd2cb9143a52.png",
251
+ "title": "Flux Tarot",
252
+ "repo": "multimodalart/flux-tarot-v1",
253
+ "trigger_word": "in the style of TOK a trtcrd tarot style"
254
+ },
255
+ #16
256
+ {
257
+ "image": "https://huggingface.co/prithivMLmods/Flux-Dev-Real-Anime-LoRA/resolve/main/images/111.png",
258
+ "title": "Real Anime",
259
+ "repo": "prithivMLmods/Flux-Dev-Real-Anime-LoRA",
260
+ "trigger_word": "Real Anime"
261
+ },
262
+ #17
263
+ {
264
+ "image": "https://huggingface.co/diabolic6045/Flux_Sticker_Lora/resolve/main/images/example_s3pxsewcb.png",
265
+ "title": "Stickers",
266
+ "repo": "diabolic6045/Flux_Sticker_Lora",
267
+ "trigger_word": "5t1cker 5ty1e"
268
+ },
269
+ #18
270
+ {
271
+ "image": "https://huggingface.co/VideoAditor/Flux-Lora-Realism/resolve/main/images/feel-the-difference-between-using-flux-with-lora-from-xlab-v0-j0ehybmvxehd1.png",
272
+ "title": "Realism",
273
+ "repo": "XLabs-AI/flux-RealismLora",
274
+ "trigger_word": ""
275
+ },
276
+ #19
277
+ {
278
+ "image": "https://huggingface.co/alvdansen/flux-koda/resolve/main/images/ComfyUI_00583_%20(1).png",
279
+ "title": "Koda",
280
+ "repo": "alvdansen/flux-koda",
281
+ "trigger_word": "flmft style"
282
+ },
283
+ #20
284
+ {
285
+ "image": "https://huggingface.co/mgwr/Cine-Aesthetic/resolve/main/images/00019-1333633802.png",
286
+ "title": "Cine Aesthetic",
287
+ "repo": "mgwr/Cine-Aesthetic",
288
+ "trigger_word": "mgwr/cine"
289
+ },
290
+ #21
291
+ {
292
+ "image": "https://huggingface.co/SebastianBodza/flux_cute3D/resolve/main/images/astronaut.webp",
293
+ "title": "Cute 3D",
294
+ "repo": "SebastianBodza/flux_cute3D",
295
+ "trigger_word": "NEOCUTE3D"
296
+ },
297
+ #22
298
+ {
299
+ "image": "https://huggingface.co/bingbangboom/flux_dreamscape/resolve/main/images/3.jpg",
300
+ "title": "Dreamscape",
301
+ "repo": "bingbangboom/flux_dreamscape",
302
+ "trigger_word": "in the style of BSstyle004"
303
+ },
304
+ #23
305
+ {
306
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism/resolve/main/images/xc.webp",
307
+ "title": "Cute Kawaii",
308
+ "repo": "prithivMLmods/Canopus-Cute-Kawaii-Flux-LoRA",
309
+ "trigger_word": "cute-kawaii"
310
+ },
311
+ #24
312
+ {
313
+ "image": "https://cdn-uploads.huggingface.co/production/uploads/64b24543eec33e27dc9a6eca/_jyra-jKP_prXhzxYkg1O.png",
314
+ "title": "Pastel Anime",
315
+ "repo": "Raelina/Flux-Pastel-Anime",
316
+ "trigger_word": "Anime"
317
+ },
318
+ #25
319
+ {
320
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Vector-Journey/resolve/main/images/f7a66b51c89896854f31bef743dc30f33c6ea3c0ed8f9ff04d24b702.jpg",
321
+ "title": "Vector",
322
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Vector-Journey",
323
+ "trigger_word": "artistic style blends reality and illustration elements"
324
+ },
325
+ #26
326
+ {
327
+ "image": "https://huggingface.co/bingbangboom/flux-miniature-worlds/resolve/main/images/2.jpg",
328
+ "title": "Miniature",
329
+ "repo": "bingbangboom/flux-miniature-worlds",
330
+ "weights": "flux_MNTRWRLDS.safetensors",
331
+ "trigger_word": "Image in the style of MNTRWRLDS"
332
+ },
333
+ #27
334
+ {
335
+ "image": "https://huggingface.co/glif-loradex-trainer/bingbangboom_flux_surf/resolve/main/samples/1729012111574__000002000_0.jpg",
336
+ "title": "Surf Bingbangboom",
337
+ "repo": "glif-loradex-trainer/bingbangboom_flux_surf",
338
+ "weights": "flux_surf.safetensors",
339
+ "trigger_word": "SRFNGV01"
340
+ },
341
+ #28
342
+ {
343
+ "image": "https://huggingface.co/prithivMLmods/Canopus-Snoopy-Charlie-Brown-Flux-LoRA/resolve/main/000.png",
344
+ "title": "Snoopy Charlie",
345
+ "repo": "prithivMLmods/Canopus-Snoopy-Charlie-Brown-Flux-LoRA",
346
+ "trigger_word": "Snoopy Charlie Brown"
347
+ },
348
+ #29
349
+ {
350
+ "image": "https://huggingface.co/alvdansen/sonny-anime-fixed/resolve/main/images/uqAuIMqA6Z7mvPkHg4qJE_f4c3cbe64e0349e7b946d02adeacdca3.png",
351
+ "title": "Fixed Sonny",
352
+ "repo": "alvdansen/sonny-anime-fixed",
353
+ "trigger_word": "nm22 style"
354
+ },
355
+ #30
356
+ {
357
+ "image": "https://huggingface.co/davisbro/flux-multi-angle/resolve/main/multi-angle-examples/3.png",
358
+ "title": "Multi Angle",
359
+ "repo": "davisbro/flux-multi-angle",
360
+ "trigger_word": "A TOK composite photo of a person posing at different angles"
361
+ },
362
+ #31
363
+ {
364
+ "image": "https://huggingface.co/glif/how2draw/resolve/main/images/glif-how2draw-araminta-k-vbnvy94npt8m338r2vm02m50.jpg",
365
+ "title": "How2Draw",
366
+ "repo": "glif/how2draw",
367
+ "trigger_word": "How2Draw"
368
+
369
+ },
370
+ #32
371
+ {
372
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster/resolve/main/images/6dd1a918d89991ad5e40513ab88e7d892077f89dac93edcf4b660dd2.jpg",
373
+ "title": "Text Poster",
374
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster",
375
+ "trigger_word": "text poster"
376
+ },
377
+ #33
378
+ {
379
+ "image": "https://huggingface.co/SebastianBodza/Flux_Aquarell_Watercolor_v2/resolve/main/images/coffee.webp",
380
+ "title": "Aquarell Watercolor",
381
+ "repo": "SebastianBodza/Flux_Aquarell_Watercolor_v2",
382
+ "trigger_word": "AQUACOLTOK"
383
+ },
384
+ #34
385
+ {
386
+ "image": "https://huggingface.co/Purz/face-projection/resolve/main/34031797.jpeg",
387
+ "title": "Face Projection ",
388
+ "repo": "Purz/face-projection",
389
+ "trigger_word": "f4c3_p40j3ct10n"
390
+ },
391
+ #35
392
+ {
393
+ "image": "https://huggingface.co/martintomov/ecom-flux-v2/resolve/main/images/example_z30slf97z.png",
394
+ "title": "Ecom Design Art",
395
+ "repo": "martintomov/ecom-flux-v2",
396
+ "trigger_word": ""
397
+ },
398
+ #36
399
+ {
400
+ "image": "https://huggingface.co/TheAwakenOne/max-headroom/resolve/main/sample/max-headroom_000900_00_20241015234926.png",
401
+ "title": "Max Head-Room",
402
+ "repo": "TheAwakenOne/max-headroom",
403
+ "weights": "max-headroom-v1.safetensors",
404
+ "trigger_word": "M2X, Max-Headroom"
405
+ },
406
+ #37
407
+ {
408
+ "image": "https://huggingface.co/renderartist/toyboxflux/resolve/main/images/3D__00366_.png",
409
+ "title": "Toy Box Flux",
410
+ "repo": "renderartist/toyboxflux",
411
+ "weights": "Toy_Box_Flux_v2_renderartist.safetensors",
412
+ "trigger_word": "t0yb0x, simple toy design, detailed toy design, 3D render"
413
+ },
414
+ #38
415
+ {
416
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-live-3D/resolve/main/images/51a716fb6fe9ba5d54c260b70e7ff661d38acedc7fb725552fa77bcf.jpg",
417
+ "title": "Live 3D",
418
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-live-3D",
419
+ "trigger_word": ""
420
+ },
421
+ #39
422
+ {
423
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Garbage-Bag-Art/resolve/main/images/42e944819b43869a03dc252d10409b5944a62494c7082816121016f9.jpg",
424
+ "title": "Garbage Bag Art",
425
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Garbage-Bag-Art",
426
+ "trigger_word": "Inflatable plastic bag"
427
+ },
428
+ #40
429
+ {
430
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design/resolve/main/images/73e7db6a33550d05836ce285549de60075d05373c7b0660d631dac33.jpg",
431
+ "title": "Logo Design",
432
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design",
433
+ "trigger_word": "wablogo, logo, Minimalist"
434
+ },
435
+ #41
436
+ {
437
+ "image": "https://huggingface.co/punzel/flux_sadie_sink/resolve/main/images/ComfyUI_Flux_Finetune_00069_.png",
438
+ "title": "Sadie Sink",
439
+ "repo": "punzel/flux_sadie_sink",
440
+ "weights": "flux_sadie_sink.safetensors",
441
+ "trigger_word": "Sadie Sink"
442
+ },
443
+ #42
444
+ {
445
+ "image": "https://huggingface.co/punzel/flux_jenna_ortega/resolve/main/images/ComfyUI_Flux_Finetune_00065_.png",
446
+ "title": "Jenna ortega",
447
+ "repo": "punzel/flux_jenna_ortega",
448
+ "weights": "flux_jenna_ortega.safetensors",
449
+ "trigger_word": "Jenna ortega"
450
+ },
451
+ #43
452
+ {
453
+ "image": "https://huggingface.co/Wakkamaruh/balatro-poker-cards/resolve/main/samples/01.png",
454
+ "title": "Poker Cards",
455
+ "repo": "Wakkamaruh/balatro-poker-cards",
456
+ "weights": "balatro-poker-cards.safetensors",
457
+ "trigger_word": "balatrocard"
458
+ },
459
+ #44
460
+ {
461
+ "image": "https://huggingface.co/lichorosario/flux-cubist-cartoon/resolve/main/samples/albert-einstein.png",
462
+ "title": "Cubist Cartoon",
463
+ "repo": "lichorosario/flux-cubist-cartoon",
464
+ "weights": "lora.safetensors",
465
+ "trigger_word": "CBSTCRTN"
466
+ },
467
+ #45
468
+ {
469
+ "image": "https://huggingface.co/iliketoasters/miniature-people/resolve/main/images/1757-over%20the%20shoulder%20shot%2C%20raw%20photo%2C%20a%20min-fluxcomfy-orgflux1-dev-fp8-128443497-converted.png",
470
+ "title": "Miniature People",
471
+ "repo": "iliketoasters/miniature-people",
472
+ "trigger_word": "miniature people"
473
+ },
474
+ #46
475
+ {
476
+ "image": "https://huggingface.co/ampp/rough-kids-illustrations/resolve/main/samples/1725115106736__000001000_0.jpg",
477
+ "title": "kids Illustrations",
478
+ "repo": "ampp/rough-kids-illustrations",
479
+ "weights": "rough-kids-illustrations.safetensors",
480
+ "trigger_word": "r0ughkids4rt"
481
+ },
482
+ #47
483
+ {
484
+ "image": "https://huggingface.co/lichorosario/flux-lora-tstvctr/resolve/main/images/example_mo3jx93o6.png",
485
+ "title": "TSTVCTR Cartoon",
486
+ "repo": "lichorosario/flux-lora-tstvctr",
487
+ "weights": "lora.safetensors",
488
+ "trigger_word": "TSTVCTR cartoon illustration"
489
+ },
490
+ #48
491
+ {
492
+ "image": "https://huggingface.co/lichorosario/flux-lora-gliff-tosti-vector-no-captions-2500s/resolve/main/images/example_i6h6fi9sq.png",
493
+ "title": "Tosti Vector",
494
+ "repo": "lichorosario/flux-lora-gliff-tosti-vector-no-captions-2500s",
495
+ "weights": "flux_dev_tosti_vector_without_captions_000002500.safetensors",
496
+ "trigger_word": ""
497
+ },
498
+ #49
499
+ {
500
+ "image": "https://huggingface.co/AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion/resolve/main/Trashy.png",
501
+ "title": "Propaganda Poster",
502
+ "repo": "AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion",
503
+ "weights": "propaganda_schnell_v1.safetensors",
504
+ "trigger_word": "propaganda poster"
505
+ },
506
+ #50
507
+ {
508
+ "image": "https://huggingface.co/WizWhite/Wiz-PunchOut_Ringside_Portrait/resolve/main/images/punch0ut__ringside_pixel_portrait_depicting_chris_brown_wearing_a_veil__moonstone_gray_background_with_white_ropes___1923906484.png",
509
+ "title": "Ringside Portrait",
510
+ "repo": "WizWhite/Wiz-PunchOut_Ringside_Portrait",
511
+ "trigger_word": "punch0ut, ringside pixel portrait depicting"
512
+ },
513
+ #51
514
+ {
515
+ "image": "https://huggingface.co/glif-loradex-trainer/kklors_flux_dev_long_exposure/resolve/main/samples/1729016926778__000003000_3.jpg",
516
+ "title": "Long Exposure",
517
+ "repo": "glif-loradex-trainer/kklors_flux_dev_long_exposure",
518
+ "weights": "flux_dev_long_exposure.safetensors",
519
+ "trigger_word": "LE"
520
+ },
521
+ #52
522
+ {
523
+ "image": "https://huggingface.co/DamarJati/streetwear-flux/resolve/main/img/79e891f9-ceb8-4f8a-a51d-bb432789d037.jpeg",
524
+ "title": "Street Wear",
525
+ "repo": "DamarJati/streetwear-flux",
526
+ "weights": "Streetwear.safetensors",
527
+ "trigger_word": "Handling Information Tshirt template"
528
+ },
529
+ #53
530
+ {
531
+ "image": "https://huggingface.co/strangerzonehf/Flux-NTFv4-Designs-LoRA/resolve/main/images/6.png",
532
+ "title": "NFT V4",
533
+ "repo": "strangerzonehf/Flux-NFTv4-Designs-LoRA",
534
+ "weights": "NFTv4.safetensors",
535
+ "trigger_word": "NFT V4"
536
+ },
537
+ #54
538
+ {
539
+ "image": "https://huggingface.co/multimodalart/product-design/resolve/main/images/example_vgv87rlfl.png",
540
+ "title": "Product Design",
541
+ "repo": "multimodalart/product-design",
542
+ "weights": "product-design.safetensors",
543
+ "trigger_word": "product designed by prdsgn"
544
+ },
545
+ #55
546
+ {
547
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Typography-ASCII/resolve/main/images/NNN.png",
548
+ "title": "Typography",
549
+ "repo": "prithivMLmods/Canopus-LoRA-Flux-Typography-ASCII",
550
+ "weights": "Typography.safetensors",
551
+ "trigger_word": "Typography, ASCII Art"
552
+ },
553
+ #56
554
+ {
555
+ "image": "https://huggingface.co/mateo-19182/mosoco/resolve/main/samples/1725714834007__000002000_0.jpg",
556
+ "title": "Mosoco",
557
+ "repo": "mateo-19182/mosoco",
558
+ "weights": "mosoco.safetensors",
559
+ "trigger_word": "moscos0"
560
+ },
561
+ #57
562
+ {
563
+ "image": "https://huggingface.co/jakedahn/flux-latentpop/resolve/main/images/2.webp",
564
+ "title": "Latent Pop",
565
+ "repo": "jakedahn/flux-latentpop",
566
+ "weights": "lora.safetensors",
567
+ "trigger_word": "latentpop"
568
+ },
569
+ #58
570
+ {
571
+ "image": "https://huggingface.co/glif-loradex-trainer/ddickinson_dstyl3xl/resolve/main/samples/1728556571974__000001500_2.jpg",
572
+ "title": "Dstyl3xl",
573
+ "repo": "glif-loradex-trainer/ddickinson_dstyl3xl",
574
+ "weights": "dstyl3xl.safetensors",
575
+ "trigger_word": "in the style of dstyl3xl"
576
+ },
577
+ #59
578
+ {
579
+ "image": "https://huggingface.co/TDN-M/RetouchFLux/resolve/main/images/496f0680-0158-4f37-805d-d227c1a08a7b.png",
580
+ "title": "Retouch FLux",
581
+ "repo": "TDN-M/RetouchFLux",
582
+ "weights": "TDNM_Retouch.safetensors",
583
+ "trigger_word": "luxury, enhance, hdr"
584
+ },
585
+ #60
586
+ {
587
+ "image": "https://huggingface.co/glif/anime-blockprint-style/resolve/main/images/glif-block-print-anime-flux-dev-araminta-k-lora-araminta-k-e35k8xqsrb8dtq2qcv4gsr3z.jpg",
588
+ "title": "Block Print",
589
+ "repo": "glif/anime-blockprint-style",
590
+ "weights": "bwmanga.safetensors",
591
+ "trigger_word": "blockprint style"
592
+ },
593
+ #61
594
+ {
595
+ "image": "https://huggingface.co/renderartist/weirdthingsflux/resolve/main/images/3D__02303_.png",
596
+ "title": "Weird Things Flux",
597
+ "repo": "renderartist/weirdthingsflux",
598
+ "weights": "Weird_Things_Flux_v1_renderartist.safetensors",
599
+ "trigger_word": "w3irdth1ngs, illustration"
600
+ },
601
+ #62
602
+ {
603
+ "image": "https://replicate.delivery/yhqm/z7f2OBcvga07dCoJ4FeRGZCbE5PvipLhogPhEeU7BazIg5lmA/out-0.webp",
604
+ "title": "Replicate Flux LoRA",
605
+ "repo": "lucataco/ReplicateFluxLoRA",
606
+ "weights": "flux_train_replicate.safetensors",
607
+ "trigger_word": "TOK"
608
+ },
609
+ #63
610
+ {
611
+ "image": "https://huggingface.co/alvdansen/haunted_linework_flux/resolve/main/images/ComfyUI_00755_.png",
612
+ "title": "Linework",
613
+ "repo": "alvdansen/haunted_linework_flux",
614
+ "weights": "hauntedlinework_flux_araminta_k.safetensors",
615
+ "trigger_word": "hntdlnwrk style"
616
+ },
617
+ #64
618
+ {
619
+ "image": "https://huggingface.co/fofr/flux-cassette-futurism/resolve/main/images/example_qgry9jnkj.png",
620
+ "title": "Cassette Futurism",
621
+ "repo": "fofr/flux-cassette-futurism",
622
+ "weights": "lora.safetensors",
623
+ "trigger_word": "cassette futurism"
624
+ },
625
+ #65
626
+ {
627
+ "image": "https://huggingface.co/Wadaka/Mojo_Style_LoRA/resolve/main/Samples/Sample2.png",
628
+ "title": "Mojo Style",
629
+ "repo": "Wadaka/Mojo_Style_LoRA",
630
+ "weights": "Mojo_Style_LoRA.safetensors",
631
+ "trigger_word": "Mojo_Style"
632
+
633
+ },
634
+ #66
635
+ {
636
+ "image": "https://huggingface.co/Norod78/JojosoStyle-flux-lora/resolve/main/samples/1725244218477__000004255_1.jpg",
637
+ "title": "Jojoso Style",
638
+ "repo": "Norod78/JojosoStyle-flux-lora",
639
+ "weights": "JojosoStyle_flux_lora.safetensors",
640
+ "trigger_word": "JojosoStyle"
641
+ },
642
+ #67
643
+ {
644
+ "image": "https://huggingface.co/Chunte/flux-lora-Huggieverse/resolve/main/images/Happy%20star.png",
645
+ "title": "Huggieverse",
646
+ "repo": "Chunte/flux-lora-Huggieverse",
647
+ "weights": "lora.safetensors",
648
+ "trigger_word": "HGGRE"
649
+ },
650
+ #68
651
+ {
652
+ "image": "https://huggingface.co/diabolic6045/Flux_Wallpaper_Lora/resolve/main/images/example_hjp51et93.png",
653
+ "title": "Wallpaper LoRA",
654
+ "repo": "diabolic6045/Flux_Wallpaper_Lora",
655
+ "weights": "tost-2024-09-20-07-35-44-wallpap3r5.safetensors",
656
+ "trigger_word": "wallpap3r5"
657
+ },
658
+ #69
659
+ {
660
+ "image": "https://huggingface.co/bingbangboom/flux_geopop/resolve/main/extras/5.png",
661
+ "title": "Geo Pop",
662
+ "repo": "bingbangboom/flux_geopop",
663
+ "weights": "geopop_NWGMTRCPOPV01.safetensors",
664
+ "trigger_word": "illustration in the style of NWGMTRCPOPV01"
665
+ },
666
+ #70
667
+ {
668
+ "image": "https://huggingface.co/bingbangboom/flux_colorscape/resolve/main/images/4.jpg",
669
+ "title": "Colorscape",
670
+ "repo": "bingbangboom/flux_colorscape",
671
+ "weights": "flux_colorscape.safetensors",
672
+ "trigger_word": "illustration in the style of ASstyle001"
673
+ },
674
+ #71
675
+ {
676
+ "image": "https://huggingface.co/dvyio/flux-lora-thermal-image/resolve/main/images/WROSaNNU4-Gw0r5QoBRjf_f164ffa4f0804e68bad1d06d30deecfa.jpg",
677
+ "title": "Thermal Image",
678
+ "repo": "dvyio/flux-lora-thermal-image",
679
+ "weights": "79b5004c57ef4c4390dead1c65977bbb_pytorch_lora_weights.safetensors",
680
+ "trigger_word": "thermal image in the style of THRML"
681
+ },
682
+ #72
683
+ {
684
+ "image": "https://huggingface.co/prithivMLmods/Canopus-Clothing-Flux-LoRA/resolve/main/images/333.png",
685
+ "title": "Clothing Flux",
686
+ "repo": "prithivMLmods/Canopus-Clothing-Flux-LoRA",
687
+ "weights": "Canopus-Clothing-Flux-Dev-Florence2-LoRA.safetensors",
688
+ "trigger_word": "Hoodie, Clothes, Shirt, Pant"
689
+ },
690
+ #73
691
+ {
692
+ "image": "https://huggingface.co/dvyio/flux-lora-stippled-illustration/resolve/main/images/57FPpbu74QTV45w6oNOtZ_26832270585f456c99e4a98b1c073745.jpg",
693
+ "title": "Stippled Illustration",
694
+ "repo": "dvyio/flux-lora-stippled-illustration",
695
+ "weights": "31984be602a04a1fa296d9ccb244fb29_pytorch_lora_weights.safetensors",
696
+ "trigger_word": "stippled illustration in the style of STPPLD"
697
+ },
698
+ #74
699
+ {
700
+ "image": "https://huggingface.co/wayned/fruitlabels/resolve/main/images/ComfyUI_03969_.png",
701
+ "title": "Fruitlabels",
702
+ "repo": "wayned/fruitlabels",
703
+ "weights": "fruitlabels2.safetensors",
704
+ "trigger_word": "fruit labels"
705
+
706
+ },
707
+ #75
708
+ {
709
+ "image": "https://huggingface.co/punzel/flux_margot_robbie/resolve/main/images/ComfyUI_Flux_Finetune_00142_.png",
710
+ "title": "Margot Robbie",
711
+ "repo": "punzel/flux_margot_robbie",
712
+ "weights": "flux_margot_robbie.safetensors",
713
+ "trigger_word": ""
714
+ },
715
+ #76
716
+ {
717
+ "image": "https://huggingface.co/diabolic6045/Formula1_Lego_Lora/resolve/main/images/example_502kcuiba.png",
718
+ "title": "Formula 1 Lego",
719
+ "repo": "punzel/flux_margot_robbie",
720
+ "weights": "tost-2024-09-20-09-58-33-f1leg0s.safetensors",
721
+ "trigger_word": "f1leg0s"
722
+ },
723
+ #77
724
+ {
725
+ "image": "https://huggingface.co/glif/Brain-Melt-Acid-Art/resolve/main/images/IMG_0832.png",
726
+ "title": "Melt Acid",
727
+ "repo": "glif/Brain-Melt-Acid-Art",
728
+ "weights": "Brain_Melt.safetensors",
729
+ "trigger_word": "in an acid surrealism style, maximalism"
730
+ },
731
+ #78
732
+ {
733
+ "image": "https://huggingface.co/jeremytai/enso-zen/resolve/main/images/example_a0iwdj5lu.png",
734
+ "title": "Enso",
735
+ "repo": "jeremytai/enso-zen",
736
+ "weights": "enso-zen.safetensors",
737
+ "trigger_word": "enso"
738
+ },
739
+ #79
740
+ {
741
+ "image": "https://huggingface.co/veryVANYA/opus-ascii-flux/resolve/main/31654332.jpeg",
742
+ "title": "Opus Ascii",
743
+ "repo": "veryVANYA/opus-ascii-flux",
744
+ "weights": "flux_opus_ascii.safetensors",
745
+ "trigger_word": "opus_ascii"
746
+ },
747
+ #80
748
+ {
749
+ "image": "https://huggingface.co/crystantine/cybrpnkz/resolve/main/images/example_plyxk0lej.png",
750
+ "title": "Cybrpnkz",
751
+ "repo": "crystantine/cybrpnkz",
752
+ "weights": "cybrpnkz.safetensors",
753
+ "trigger_word": "architecture style of CYBRPNKZ"
754
+ },
755
+ #81
756
+ {
757
+ "image": "https://huggingface.co/fyp1/pattern_generation/resolve/main/images/1727560066052__000001000_7.jpg",
758
+ "title": "Pattern Generation",
759
+ "repo": "fyp1/pattern_generation",
760
+ "weights": "flux_dev_finetune.safetensors",
761
+ "trigger_word": "pattern"
762
+ },
763
+ #82
764
+ {
765
+ "image": "https://huggingface.co/TheAwakenOne/caricature/resolve/main/sample/caricature_000900_03_20241007143412.png",
766
+ "title": "Caricature",
767
+ "repo": "TheAwakenOne/caricature",
768
+ "weights": "caricature.safetensors",
769
+ "trigger_word": "CCTUR3"
770
+ },
771
+ #83
772
+ {
773
+ "image": "https://huggingface.co/strangerzonehf/Flux-3DXL-Partfile-C0001/resolve/main/images/C3.png",
774
+ "title": "3DXLC1",
775
+ "repo": "strangerzonehf/Flux-3DXL-Partfile-C0001",
776
+ "weights": "3DXLC1.safetensors",
777
+ "trigger_word": "3DXLC1"
778
+ },
779
+ #84
780
+ {
781
+ "image": "https://huggingface.co/Purz/neon-sign/resolve/main/33944768.jpeg",
782
+ "title": "Neon",
783
+ "repo": "Purz/neon-sign",
784
+ "weights": "purz-n30n_51gn.safetensors",
785
+ "trigger_word": "n30n_51gn"
786
+ },
787
+ #85
788
+ {
789
+ "image": "https://huggingface.co/WizWhite/wizard-s-vintage-sardine-tins/resolve/main/27597694.jpeg",
790
+ "title": "Vintage Sardine Tins",
791
+ "repo": "WizWhite/wizard-s-vintage-sardine-tins",
792
+ "weights": "Wiz-SardineTins_Flux.safetensors",
793
+ "trigger_word": "Vintage Sardine Tin, Tinned Fish, vintage xyz tin"
794
+ },
795
+ #86
796
+ {
797
+ "image": "https://huggingface.co/TheAwakenOne/mtdp-balloon-character/resolve/main/sample/mtdp-balloon-character_000200_01_20241014221110.png",
798
+ "title": "Float Ballon Character",
799
+ "repo": "TheAwakenOne/mtdp-balloon-character",
800
+ "weights": "mtdp-balloon-character.safetensors",
801
+ "trigger_word": "FLOAT"
802
+ },
803
+ #87
804
+ {
805
+ "image": "https://huggingface.co/glif/golden-haggadah/resolve/main/images/6aca6403-ecd6-4216-a66a-490ae25ff1b2.jpg",
806
+ "title": "Golden Haggadah",
807
+ "repo": "glif/golden-haggadah",
808
+ "weights": "golden_haggadah.safetensors",
809
+ "trigger_word": "golden haggadah style"
810
+ },
811
+ #88
812
+ {
813
+ "image": "https://huggingface.co/glif-loradex-trainer/usernametaken420__oz_ftw_balaclava/resolve/main/samples/1729278631255__000001500_1.jpg",
814
+ "title": "Ftw Balaclava",
815
+ "repo": "glif-loradex-trainer/usernametaken420__oz_ftw_balaclava",
816
+ "weights": "oz_ftw_balaclava.safetensors",
817
+ "trigger_word": "ftw balaclava"
818
+ },
819
+ #89
820
+ {
821
+ "image": "https://huggingface.co/AlloReview/flux-lora-undraw/resolve/main/images/Flux%20Lora%20Undraw%20Prediction.webp",
822
+ "title": "Undraw",
823
+ "repo": "AlloReview/flux-lora-undraw",
824
+ "weights": "lora.safetensors",
825
+ "trigger_word": "in the style of UndrawPurple"
826
+ },
827
+ #90
828
+ {
829
+ "image": "https://huggingface.co/Disra/lora-anime-test-02/resolve/main/assets/image_0_0.png",
830
+ "title": "Anime Test",
831
+ "repo": "Disra/lora-anime-test-02",
832
+ "weights": "pytorch_lora_weights.safetensors",
833
+ "trigger_word": "anime"
834
+ },
835
+ #91
836
+ {
837
+ "image": "https://huggingface.co/wanghaofan/Black-Myth-Wukong-FLUX-LoRA/resolve/main/images/7d0ac495a4d5e4a3a30df25f08379a3f956ef99e1dc3e252fc1fca3a.jpg",
838
+ "title": "Black Myth Wukong",
839
+ "repo": "wanghaofan/Black-Myth-Wukong-FLUX-LoRA",
840
+ "weights": "pytorch_lora_weights.safetensors",
841
+ "trigger_word": "wukong"
842
+ },
843
+ #92
844
+ {
845
+ "image": "https://huggingface.co/nerijs/pastelcomic-flux/resolve/main/images/4uZ_vaYg-HQnfa5D9gfli_38bf3f95d8b345e5a9bd42d978a15267.png",
846
+ "title": "Pastelcomic",
847
+ "repo": "nerijs/pastelcomic-flux",
848
+ "weights": "pastelcomic_v1.safetensors",
849
+ "trigger_word": ""
850
+ },
851
+ #93
852
+ {
853
+ "image": "https://huggingface.co/RareConcepts/Flux.1-dev-LoKr-Moonman/resolve/main/assets/image_6_0.png",
854
+ "title": "Moonman",
855
+ "repo": "RareConcepts/Flux.1-dev-LoKr-Moonman",
856
+ "weights": "pytorch_lora_weights.safetensors",
857
+ "trigger_word": "moonman"
858
+ },
859
+ #94
860
+ {
861
+ "image": "https://huggingface.co/martintomov/ascii-flux-v1/resolve/main/images/0af53645-ddcc-4803-93c8-f7e43f6fbbd1.jpeg",
862
+ "title": "Ascii Flux",
863
+ "repo": "martintomov/ascii-flux-v1",
864
+ "weights": "ascii-art-v1.safetensors",
865
+ "trigger_word": "ASCII art"
866
+ },
867
+ #95
868
+ {
869
+ "image": "https://huggingface.co/Omarito2412/Stars-Galaxy-Flux/resolve/main/images/25128409.jpeg",
870
+ "title": "Ascii Flux",
871
+ "repo": "Omarito2412/Stars-Galaxy-Flux",
872
+ "weights": "Stars_Galaxy_Flux.safetensors",
873
+ "trigger_word": "mlkwglx"
874
+ },
875
+ #96
876
+ {
877
+ "image": "https://huggingface.co/brushpenbob/flux-pencil-v2/resolve/main/26193927.jpeg",
878
+ "title": "Pencil V2",
879
+ "repo": "brushpenbob/flux-pencil-v2",
880
+ "weights": "Flux_Pencil_v2_r1.safetensors",
881
+ "trigger_word": "evang style"
882
+ },
883
+ #97
884
+ {
885
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Children-Simple-Sketch/resolve/main/images/1f20519208cef367af2fda8d91ddbba674f39b097389d12ee25b4cb1.jpg",
886
+ "title": "Children Simple Sketch",
887
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Children-Simple-Sketch",
888
+ "weights": "FLUX-dev-lora-children-simple-sketch.safetensors",
889
+ "trigger_word": "sketched style"
890
+ },
891
+ #98
892
+ {
893
+ "image": "https://huggingface.co/victor/contemporarink/resolve/main/images/example_hnqc22urm.png",
894
+ "title": "Contemporarink",
895
+ "repo": "victor/contemporarink",
896
+ "weights": "inky-colors.safetensors",
897
+ "trigger_word": "ECACX"
898
+ },
899
+ #99
900
+ {
901
+ "image": "https://huggingface.co/wavymulder/OverlordStyleFLUX/resolve/main/imgs/ComfyUI_00668_.png",
902
+ "title": "OverlordStyle",
903
+ "repo": "wavymulder/OverlordStyleFLUX",
904
+ "weights": "ovld_style_overlord_wavymulder.safetensors",
905
+ "trigger_word": "ovld style anime"
906
+ },
907
+ #100
908
+ {
909
+ "image": "https://huggingface.co/marceloxp/canny-quest/resolve/main/26676266.jpeg",
910
+ "title": "Canny quest",
911
+ "repo": "marceloxp/canny-quest",
912
+ "weights": "Canny_Quest-000004.safetensors",
913
+ "trigger_word": "blonde, silver silk dress, perfectly round sunglasses, pearl necklace"
914
+ },
915
+ #101
916
+ {
917
+ "image": "https://huggingface.co/busetolunay/building_flux_lora_v1/resolve/main/samples/1725469125185__000001250_2.jpg",
918
+ "title": "Building Flux",
919
+ "repo": "busetolunay/building_flux_lora_v1",
920
+ "weights": "building_flux_lora_v4.safetensors",
921
+ "trigger_word": "a0ce"
922
+ },
923
+ #102
924
+ {
925
+ "image": "https://huggingface.co/Omarito2412/Tinker-Bell-Flux/resolve/main/images/9e9e7eda-3ddf-467a-a7f8-6d8e3ef80cd0.png",
926
+ "title": "Tinker Bell Flux",
927
+ "repo": "Omarito2412/Tinker-Bell-Flux",
928
+ "weights": "TinkerBellV2-FLUX.safetensors",
929
+ "trigger_word": "TinkerWaifu, blue eyes, single hair bun"
930
+ },
931
+ #103
932
+ {
933
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-playful-metropolis/resolve/main/images/3e9265312b3b726c224a955ec9254a0f95c2c8b78ce635929183a075.jpg",
934
+ "title": "Playful Metropolis",
935
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-playful-metropolis",
936
+ "weights": "FLUX-dev-lora-playful_metropolis.safetensors",
937
+ "trigger_word": ""
938
+ },
939
+ #104
940
+ {
941
+ "image": "https://huggingface.co/prithivMLmods/Castor-Character-Polygon-LoRA/resolve/main/images/1000.webp",
942
+ "title": "Character Polygon",
943
+ "repo": "prithivMLmods/Castor-Character-Polygon-Flux-LoRA",
944
+ "weights": "Castor-Character-Polygon-LoRA.safetensors",
945
+ "trigger_word": "3D Polygon"
946
+ },
947
+ #105
948
+ {
949
+ "image": "https://huggingface.co/prithivMLmods/Castor-Gta6-Theme-Flux-LoRA/resolve/main/images/gta1.webp",
950
+ "title": "GTA 6 Theme",
951
+ "repo": "prithivMLmods/Castor-Gta6-Theme-Flux-LoRA",
952
+ "weights": "Gta6.safetensors",
953
+ "trigger_word": "GTA 6 Theme, World of GTA 6"
954
+ },
955
+ #106
956
+ {
957
+ "image": "https://huggingface.co/prithivMLmods/Castor-Concept-Gta6-Character-Design/resolve/main/images/L3.webp",
958
+ "title": "GTA Character Concept",
959
+ "repo": "prithivMLmods/Castor-Flux-Concept-Gta6-Character-Design",
960
+ "weights": "Gta6-Concept-Charecter.safetensors",
961
+ "trigger_word": "Jason, Lucia, GTA 6"
962
+ },
963
+ #107
964
+ {
965
+ "image": "https://huggingface.co/prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA/resolve/main/images/S1.png",
966
+ "title": "3D Sketchfab",
967
+ "repo": "prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA",
968
+ "weights": "Castor-3D-Sketchfab-Flux-LoRA.safetensors",
969
+ "trigger_word": "3D Sketchfab"
970
+ },
971
+ #108
972
+ {
973
+ "image": "https://huggingface.co/prithivMLmods/Castor-Collage-Dim-Flux-LoRA/resolve/main/images/C1.webp",
974
+ "title": "In Image Collage",
975
+ "repo": "prithivMLmods/Castor-Collage-Dim-Flux-LoRA",
976
+ "weights": "Castor-Collage-Dim-Flux-LoRA.safetensors",
977
+ "trigger_word": "collage"
978
+ },
979
+ #109
980
+ {
981
+ "image": "https://huggingface.co/brushpenbob/flux-midjourney-anime/resolve/main/25439344.jpeg",
982
+ "title": "Anime Journey",
983
+ "repo": "brushpenbob/flux-midjourney-anime",
984
+ "weights": "FLUX_MidJourney_Anime.safetensors",
985
+ "trigger_word": "egmid"
986
+ },
987
+ #110
988
+ {
989
+ "image": "https://huggingface.co/glif-loradex-trainer/maxxd4240_minimalistPastel/resolve/main/samples/1727255690613__000002500_0.jpg",
990
+ "title": "Min Pastel",
991
+ "repo": "glif-loradex-trainer/maxxd4240_minimalistPastel",
992
+ "weights": "minimalistPastel.safetensors",
993
+ "trigger_word": "minimalistPastel"
994
+ },
995
+ #111
996
+ {
997
+ "image": "https://huggingface.co/prithivMLmods/Castor-Red-Dead-Redemption-2-Flux-LoRA/resolve/main/images/rdr12.webp",
998
+ "title": "RDR2",
999
+ "repo": "prithivMLmods/Castor-Red-Dead-Redemption-2-Flux-LoRA",
1000
+ "weights": "Castor-Red-Dead-Redemption-2-Flux-LoRA.safetensors",
1001
+ "trigger_word": "Red Dead Redemption 2"
1002
+ },
1003
+ #112
1004
+ {
1005
+ "image": "https://huggingface.co/WizWhite/wizard-s-paper-model-universe/resolve/main/35746354.jpeg",
1006
+ "title": "Paper Model",
1007
+ "repo": "WizWhite/wizard-s-paper-model-universe",
1008
+ "weights": "Wiz-Paper_Model_Universe.safetensors",
1009
+ "trigger_word": "A paper model"
1010
+ },
1011
+ #113
1012
+ {
1013
+ "image": "https://huggingface.co/renderartist/retrocomicflux/resolve/main/images/ComfyUI_temp_ipugi_00040_.png",
1014
+ "title": "Retrocomic Flux",
1015
+ "repo": "renderartist/retrocomicflux",
1016
+ "weights": "Retro_Comic_Flux_v1_renderartist.safetensors",
1017
+ "trigger_word": "comic book panel"
1018
+ },
1019
+ #114
1020
+ {
1021
+ "image": "https://huggingface.co/prithivMLmods/Castor-Happy-Halloween-Flux-LoRA/resolve/main/images/hw1.webp",
1022
+ "title": "Halloween Flux",
1023
+ "repo": "prithivMLmods/Castor-Happy-Halloween-Flux-LoRA",
1024
+ "weights": "Castor-Happy-Halloween-Flux-LoRA.safetensors",
1025
+ "trigger_word": "happy halloween"
1026
+ },
1027
+ #115
1028
+ {
1029
+ "image": "https://huggingface.co/prithivMLmods/Castor-3D-Portrait-Flux-LoRA/resolve/main/images/1.webp",
1030
+ "title": "Castor-3D-Portrait",
1031
+ "repo": "prithivMLmods/Castor-3D-Portrait-Flux-LoRA",
1032
+ "weights": "Castor-3D-Portrait-Flux-LoRA.safetensors",
1033
+ "trigger_word": "3D Portrait"
1034
+ },
1035
+ #116
1036
+ {
1037
+ "image": "https://huggingface.co/renderartist/coloringbookflux/resolve/main/images/ComfyUI_09731_.png",
1038
+ "title": "Coloring book flux",
1039
+ "repo": "renderartist/coloringbookflux",
1040
+ "weights": "c0l0ringb00k_Flux_v1_renderartist.safetensors",
1041
+ "trigger_word": "c0l0ringb00k, coloring book, coloring book page"
1042
+ },
1043
+ #117
1044
+ {
1045
+ "image": "https://huggingface.co/prithivMLmods/Uncoloured-Polygon-Flux-LoRA/resolve/main/images/1.webp",
1046
+ "title": "Uncoloured Polygon",
1047
+ "repo": "prithivMLmods/Uncoloured-Polygon-Flux-LoRA",
1048
+ "weights": "Uncoloured-3D-Polygon.safetensors",
1049
+ "trigger_word": "uncoloured polygon"
1050
+ },
1051
+ #118
1052
+ {
1053
+ "image": "https://huggingface.co/prithivMLmods/Past-Present-Deep-Mix-Flux-LoRA/resolve/main/images/PP3.webp",
1054
+ "title": "Past Present Mix",
1055
+ "repo": "prithivMLmods/Past-Present-Deep-Mix-Flux-LoRA",
1056
+ "weights": "Past-Present-Deep-Mix-Flux-LoRA.safetensors",
1057
+ "trigger_word": "Mixing Past and Present"
1058
+ },
1059
+ #119
1060
+ {
1061
+ "image": "https://huggingface.co/gokaygokay/Flux-Double-Exposure-LoRA/resolve/main/images/image3.jpg",
1062
+ "title": "Double Exposure",
1063
+ "repo": "gokaygokay/Flux-Double-Exposure-LoRA",
1064
+ "weights": "double_exposure.safetensors",
1065
+ "trigger_word": "dblxpsr"
1066
+ },
1067
+ #120
1068
+ {
1069
+ "image": "https://huggingface.co/gokaygokay/Flux-Seamless-Texture-LoRA/resolve/main/images/image3.jpg",
1070
+ "title": "Seamless Texture",
1071
+ "repo": "gokaygokay/Flux-Seamless-Texture-LoRA",
1072
+ "weights": "seamless_texture.safetensors",
1073
+ "trigger_word": "smlstxtr"
1074
+ },
1075
+ #121
1076
+ {
1077
+ "image": "https://huggingface.co/prithivMLmods/Mockup-Texture-Flux-LoRA/resolve/main/images/MU1.webp",
1078
+ "title": "Mockup Texture",
1079
+ "repo": "prithivMLmods/Mockup-Texture-Flux-LoRA",
1080
+ "weights": "Mockup-Texture.safetensors",
1081
+ "trigger_word": "Mockup"
1082
+ },
1083
+ #122
1084
+ {
1085
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA/resolve/main/images/c2.webp",
1086
+ "title": "Tarot Cards",
1087
+ "repo": "prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA",
1088
+ "weights": "Tarot-card.safetensors",
1089
+ "trigger_word": "Tarot card"
1090
+ },
1091
+ #123
1092
+ {
1093
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Amxtoon-Flux-LoRA/resolve/main/images/am1.webp",
1094
+ "title": "Amxtoon",
1095
+ "repo": "prithivMLmods/Ton618-Amxtoon-Flux-LoRA",
1096
+ "weights": "Amxtoon.safetensors",
1097
+ "trigger_word": "Amxtoon"
1098
+ },
1099
+ #124
1100
+ {
1101
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Epic-Realism-Flux-LoRA/resolve/main/images/ep3.png",
1102
+ "title": "Epic Realism",
1103
+ "repo": "prithivMLmods/Ton618-Epic-Realism-Flux-LoRA",
1104
+ "weights": "Epic-Realism-Unpruned.safetensors",
1105
+ "trigger_word": "Epic Realism"
1106
+ },
1107
+ #125
1108
+ {
1109
+ "image": "https://huggingface.co/bingbangboom/flux-mixReality/resolve/main/images/3.jpg",
1110
+ "title": "Mixed Reality",
1111
+ "repo": "bingbangboom/flux-mixReality",
1112
+ "weights": "HLFILSTHLFPHTO_000002500.safetensors",
1113
+ "trigger_word": "in the style of HLFILSTHLFPHTO"
1114
+ },
1115
+ #126
1116
+ {
1117
+ "image": "https://huggingface.co/sWizad/pokemon-trainer-sprites-pixelart-flux/resolve/main/26578919.jpeg",
1118
+ "title": "Pixelart",
1119
+ "repo": "sWizad/pokemon-trainer-sprites-pixelart-flux",
1120
+ "weights": "pktrainer_F1-v1-0.safetensors",
1121
+ "trigger_word": "pixel image of, pixel art"
1122
+ },
1123
+ #127
1124
+ {
1125
+ "image": "https://huggingface.co/bingbangboom/flux_colorscape/resolve/main/images/2.jpg",
1126
+ "title": "Colorscape",
1127
+ "repo": "bingbangboom/flux_colorscape",
1128
+ "weights": "flux_colorscape.safetensors",
1129
+ "trigger_word": "illustration in the style of ASstyle001"
1130
+ },
1131
+ #128
1132
+ {
1133
+ "image": "https://huggingface.co/UmeAiRT/FLUX.1-dev-LoRA-Modern_Pixel_art/resolve/main/images/c363192f-5fa0-4539-8295-b8d9e3e96747.jpeg",
1134
+ "title": "Modern Pixel art",
1135
+ "repo": "UmeAiRT/FLUX.1-dev-LoRA-Modern_Pixel_art",
1136
+ "weights": "ume_modern_pixelart.safetensors",
1137
+ "trigger_word": "umempart"
1138
+ },
1139
+ #129
1140
+ {
1141
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Only-Stickers-Flux-LoRA/resolve/main/images/222.png",
1142
+ "title": "Sticker",
1143
+ "repo": "prithivMLmods/Ton618-Only-Stickers-Flux-LoRA",
1144
+ "weights": "only-stickers.safetensors",
1145
+ "trigger_word": "Only Sticker"
1146
+ },
1147
+ #130
1148
+ {
1149
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Space-Wallpaper-LoRA/resolve/main/images/222.png",
1150
+ "title": "Space Wallpaper",
1151
+ "repo": "prithivMLmods/Ton618-Space-Wallpaper-LoRA",
1152
+ "weights": "space-wallpaper-xl.safetensor",
1153
+ "trigger_word": "Space Wallpaper"
1154
+ },
1155
+ #131
1156
+ {
1157
+ "image": "https://huggingface.co/prithivMLmods/Canopus-Pixar-3D-Flux-LoRA/resolve/main/images/11111.png",
1158
+ "title": "Pixar 3D",
1159
+ "repo": "prithivMLmods/Canopus-Pixar-3D-Flux-LoRA",
1160
+ "weights": "Canopus-Pixar-3D-FluxDev-LoRA.safetensors",
1161
+ "trigger_word": "Pixar 3D"
1162
+ },
1163
+ #132
1164
+ {
1165
+ "image": "https://huggingface.co/prithivMLmods/EBook-Creative-Cover-Flux-LoRA/resolve/main/images/E2.png",
1166
+ "title": "EBook Cover",
1167
+ "repo": "prithivMLmods/EBook-Creative-Cover-Flux-LoRA",
1168
+ "weights": "EBook-Cover.safetensors",
1169
+ "trigger_word": "EBook Cover"
1170
+ },
1171
+ #133
1172
+ {
1173
+ "image": "https://huggingface.co/prithivMLmods/Minimal-Futuristic-Flux-LoRA/resolve/main/images/MF3.png",
1174
+ "title": "Minimal Futuristic",
1175
+ "repo": "prithivMLmods/Minimal-Futuristic-Flux-LoRA",
1176
+ "weights": "Minimal-Futuristic.safetensors",
1177
+ "trigger_word": "Minimal Futuristic"
1178
+ },
1179
+ #134
1180
+ {
1181
+ "image": "https://huggingface.co/prithivMLmods/Seamless-Pattern-Design-Flux-LoRA/resolve/main/images/SP1.png",
1182
+ "title": "Seamless Pattern",
1183
+ "repo": "prithivMLmods/Seamless-Pattern-Design-Flux-LoRA",
1184
+ "weights": "Seamless-Pattern-Design.safetensors",
1185
+ "trigger_word": "Seamless Pattern Design"
1186
+ },
1187
+ #135
1188
+ {
1189
+ "image": "https://huggingface.co/prithivMLmods/Logo-Design-Flux-LoRA/resolve/main/images/LD1.png",
1190
+ "title": "Logo Design",
1191
+ "repo": "prithivMLmods/Logo-Design-Flux-LoRA",
1192
+ "weights": "Logo-design.safetensors",
1193
+ "trigger_word": "Logo Design"
1194
+ },
1195
+ #136
1196
+ {
1197
+ "image": "https://huggingface.co/prithivMLmods/Coloring-Book-Flux-LoRA/resolve/main/images/EB1.png",
1198
+ "title": "Coloring Book",
1199
+ "repo": "prithivMLmods/Coloring-Book-Flux-LoRA",
1200
+ "weights": "coloring-book.safetensors",
1201
+ "trigger_word": "Coloring Book"
1202
+ },
1203
+ #137
1204
+ {
1205
+ "image": "https://huggingface.co/prithivMLmods/Intense-Red-Flux-LoRA/resolve/main/images/IR1.png",
1206
+ "title": "Intense Red",
1207
+ "repo": "prithivMLmods/Intense-Red-Flux-LoRA",
1208
+ "weights": "Intense-Red.safetensors",
1209
+ "trigger_word": "Intense Red"
1210
+ },
1211
+ #138
1212
+ {
1213
+ "image": "https://huggingface.co/prithivMLmods/Glowing-Body-Flux-LoRA/resolve/main/images/GB3.png",
1214
+ "title": "Glowing Body Flux",
1215
+ "repo": "prithivMLmods/Glowing-Body-Flux-LoRA",
1216
+ "weights": "Glowing-Body.safetensors",
1217
+ "trigger_word": "Glowing Body"
1218
+ },
1219
+ #139
1220
+ {
1221
+ "image": "https://huggingface.co/prithivMLmods/Electric-Blue-Flux-LoRA/resolve/main/images/EB3.png",
1222
+ "title": "Electric Blue",
1223
+ "repo": "prithivMLmods/Electric-Blue-Flux-LoRA",
1224
+ "weights": "Electric-Blue.safetensors",
1225
+ "trigger_word": "Electric Blue"
1226
+ },
1227
+ #140
1228
+ {
1229
+ "image": "https://huggingface.co/prithivMLmods/Clouds-Illusion-Flux-LoRA/resolve/main/images/CI2.png",
1230
+ "title": "Clouds Illusion",
1231
+ "repo": "prithivMLmods/Clouds-Illusion-Flux-LoRA",
1232
+ "weights": "Clouds-Illusion.safetensors",
1233
+ "trigger_word": "Clouds Illusion"
1234
+ },
1235
+ #141
1236
+ {
1237
+ "image": "https://huggingface.co/prithivMLmods/Digital-Yellow-Flux-LoRA/resolve/main/images/DY3.png",
1238
+ "title": "Digital Yellow",
1239
+ "repo": "prithivMLmods/Digital-Yellow-Flux-LoRA",
1240
+ "weights": "Digital-Yellow.safetensors",
1241
+ "trigger_word": "Digital Yellow"
1242
+ },
1243
+ #142
1244
+ {
1245
+ "image": "https://huggingface.co/cfahlgren1/flux-qwen-capybara/resolve/main/images/example_72ao6twvk.png",
1246
+ "title": "Flux Qwen Capybara",
1247
+ "repo": "cfahlgren1/flux-qwen-capybara",
1248
+ "weights": "flux-qwen-capybara.safetensors",
1249
+ "trigger_word": "QWENCAPY"
1250
+ },
1251
+ #143
1252
+ {
1253
+ "image": "https://huggingface.co/dasdsff/PleinAirArt/resolve/main/images/e7499ccc-7504-4086-842f-275a5428ef0e.jpg",
1254
+ "title": "Plein Air Art ",
1255
+ "repo": "dasdsff/PleinAirArt",
1256
+ "weights": "PleinAir_000002500.safetensors",
1257
+ "trigger_word": "P1e!n"
1258
+ },
1259
+ #144
1260
+ {
1261
+ "image": "https://huggingface.co/prithivMLmods/Orange-Chroma-Flux-LoRA/resolve/main/images/OC1.png",
1262
+ "title": "Orange Chroma",
1263
+ "repo": "prithivMLmods/Orange-Chroma-Flux-LoRA",
1264
+ "weights": "Orange-Chroma.safetensors",
1265
+ "trigger_word": "Orange Chroma"
1266
+ },
1267
+ #145
1268
+ {
1269
+ "image": "https://huggingface.co/prithivMLmods/Lime-Green-Flux-LoRA/resolve/main/images/LM1.png",
1270
+ "title": "Lime Green",
1271
+ "repo": "prithivMLmods/Lime-Green-Flux-LoRA",
1272
+ "weights": "Lime-Green.safetensors",
1273
+ "trigger_word": "Lime Green"
1274
+ },
1275
+ #146
1276
+ {
1277
+ "image": "https://huggingface.co/prithivMLmods/Fractured-Line-Flare/resolve/main/images/FS1.png",
1278
+ "title": "Line Flare",
1279
+ "repo": "prithivMLmods/Fractured-Line-Flare",
1280
+ "weights": "Fractured-Line-Flare.safetensors",
1281
+ "trigger_word": "Fractured Line Flare"
1282
+ },
1283
+ #147
1284
+ {
1285
+ "image": "https://huggingface.co/prithivMLmods/Golden-Dust-Flux-LoRA/resolve/main/images/GD2.png",
1286
+ "title": "Golden Dust",
1287
+ "repo": "prithivMLmods/Golden-Dust-Flux-LoRA",
1288
+ "weights": "Golden-Dust.safetensors",
1289
+ "trigger_word": "Golden Dust"
1290
+ },
1291
+ #148
1292
+ {
1293
+ "image": "https://huggingface.co/prithivMLmods/Castor-Dramatic-Neon-Flux-LoRA/resolve/main/images/DN2.webp",
1294
+ "title": "Dramatic Neon",
1295
+ "repo": "prithivMLmods/Castor-Dramatic-Neon-Flux-LoRA",
1296
+ "weights": "Dramatic-Neon-Flux-LoRA.safetensors",
1297
+ "trigger_word": "Dramatic Neon"
1298
+ },
1299
+ #149
1300
+ {
1301
+ "image": "https://huggingface.co/tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator/resolve/main/images/sample7.jpeg",
1302
+ "title": "Outfit Generator",
1303
+ "repo": "tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator",
1304
+ "weights": "outfit-generator.safetensors",
1305
+ "trigger_word": "Outfit"
1306
+ },
1307
+ #150
1308
+ {
1309
+ "image": "https://huggingface.co/davisbro/half_illustration/resolve/main/images/example1.webp",
1310
+ "title": "Half Illustration",
1311
+ "repo": "davisbro/half_illustration",
1312
+ "weights": "flux_train_replicate.safetensors",
1313
+ "trigger_word": "in the style of TOK"
1314
+ },
1315
+ #151
1316
+ {
1317
+ "image": "https://huggingface.co/bingbangboom/flux_oilscape/resolve/main/extras/3.jpg",
1318
+ "title": "Oilscape",
1319
+ "repo": "bingbangboom/flux_oilscape",
1320
+ "weights": "flux_Oilstyle.safetensors",
1321
+ "trigger_word": "in the style of Oilstyle002"
1322
+ },
1323
+ #152
1324
+ {
1325
+ "image": "https://huggingface.co/prithivMLmods/Red-Undersea-Flux-LoRA/resolve/main/images/RU1.png",
1326
+ "title": "Red Undersea Flux",
1327
+ "repo": "prithivMLmods/Red-Undersea-Flux-LoRA",
1328
+ "weights": "Red-Undersea.safetensors",
1329
+ "trigger_word": "Red Undersea"
1330
+ },
1331
+ #153
1332
+ {
1333
+ "image": "https://huggingface.co/prithivMLmods/3D-Render-Flux-LoRA/resolve/main/images/3D2.png",
1334
+ "title": "3D Render Flux LoRA",
1335
+ "repo": "prithivMLmods/3D-Render-Flux-LoRA",
1336
+ "weights": "3D_Portrait.safetensors",
1337
+ "trigger_word": "3D Portrait, 3d render"
1338
+ },
1339
+ #154
1340
+ {
1341
+ "image": "https://huggingface.co/prithivMLmods/Yellow-Pop-Flux-Dev-LoRA/resolve/main/images/YP1.png",
1342
+ "title": "Yellow Pop Flux",
1343
+ "repo": "prithivMLmods/Yellow-Pop-Flux-Dev-LoRA",
1344
+ "weights": "Yellow_Pop.safetensors",
1345
+ "trigger_word": "Yellow Pop"
1346
+ },
1347
+ #155
1348
+ {
1349
+ "image": "https://huggingface.co/prithivMLmods/Purple-Grid-Flux-LoRA/resolve/main/images/PG2.png",
1350
+ "title": "Purple Grid Flux",
1351
+ "repo": "prithivMLmods/Purple-Grid-Flux-LoRA",
1352
+ "weights": "Purple_Grid.safetensors",
1353
+ "trigger_word": "Purple Grid"
1354
+ },
1355
+ #156
1356
+ {
1357
+ "image": "https://huggingface.co/prithivMLmods/Dark-Thing-Flux-LoRA/resolve/main/images/DT2.png",
1358
+ "title": "Dark Thing Flux",
1359
+ "repo": "prithivMLmods/Dark-Thing-Flux-LoRA",
1360
+ "weights": "Dark_Creature.safetensors",
1361
+ "trigger_word": "Dark Creature"
1362
+ },
1363
+ #157
1364
+ {
1365
+ "image": "https://huggingface.co/prithivMLmods/Shadow-Projection-Flux-LoRA/resolve/main/images/SP2.png",
1366
+ "title": "Shadow Projection",
1367
+ "repo": "prithivMLmods/Shadow-Projection-Flux-LoRA",
1368
+ "weights": "Shadow-Projection.safetensors",
1369
+ "trigger_word": "Shadow Projection"
1370
+ },
1371
+ #158
1372
+ {
1373
+ "image": "https://huggingface.co/prithivMLmods/Street-Bokeh-Flux-LoRA/resolve/main/images/SB2.png",
1374
+ "title": "Street Bokeh",
1375
+ "repo": "prithivMLmods/Street-Bokeh-Flux-LoRA",
1376
+ "weights": "Street_Bokeh.safetensors",
1377
+ "trigger_word": "Street Bokeh"
1378
+ },
1379
+ #159
1380
+ {
1381
+ "image": "https://huggingface.co/prithivMLmods/Abstract-Cartoon-Flux-LoRA/resolve/main/images/AC2.png",
1382
+ "title": "Abstract Cartoon",
1383
+ "repo": "prithivMLmods/Abstract-Cartoon-Flux-LoRA",
1384
+ "weights": "Abstract-Cartoon.safetensors",
1385
+ "trigger_word": "Abstract Cartoon"
1386
+ },
1387
+ #160
1388
+ {
1389
+ "image": "https://huggingface.co/Norod78/CartoonStyle-flux-lora/resolve/main/samples/1725344450635__000003800_1.jpg",
1390
+ "title": "Cartoon Style Flux",
1391
+ "repo": "Norod78/CartoonStyle-flux-lora",
1392
+ "weights": "CartoonStyle_flux_lora.safetensors",
1393
+ "trigger_word": ""
1394
+ },
1395
+ #161
1396
+ {
1397
+ "image": "https://huggingface.co/prithivMLmods/Digital-Chaos-Flux-LoRA/resolve/main/images/HDRDC3.webp",
1398
+ "title": "HDR Digital Chaos",
1399
+ "repo": "prithivMLmods/Digital-Chaos-Flux-LoRA",
1400
+ "weights": "HDR-Digital-Chaos.safetensors",
1401
+ "trigger_word": "Digital Chaos"
1402
+ },
1403
+ #162
1404
+ {
1405
+ "image": "https://huggingface.co/prithivMLmods/Yellow-Laser-Flux-LoRA/resolve/main/images/YL1.png",
1406
+ "title": "Yellow Laser",
1407
+ "repo": "prithivMLmods/Yellow-Laser-Flux-LoRA",
1408
+ "weights": "Yellow-Laser.safetensors",
1409
+ "trigger_word": "Yellow Lasers"
1410
+ },
1411
+ #163
1412
+ {
1413
+ "image": "https://huggingface.co/prithivMLmods/Bold-Shadows-Flux-LoRA/resolve/main/images/BS1.png",
1414
+ "title": "Bold Shadows",
1415
+ "repo": "prithivMLmods/Bold-Shadows-Flux-LoRA",
1416
+ "weights": "Bold-Shadows.safetensors",
1417
+ "trigger_word": "Bold Shadows"
1418
+ },
1419
+ #164
1420
+ {
1421
+ "image": "https://huggingface.co/prithivMLmods/Knitted-Character-Flux-LoRA/resolve/main/images/KC1.png",
1422
+ "title": "Knitted Character",
1423
+ "repo": "prithivMLmods/Knitted-Character-Flux-LoRA",
1424
+ "weights": "Knitted-Character.safetensors",
1425
+ "trigger_word": "Knitted Character"
1426
+ },
1427
+ #165
1428
+ {
1429
+ "image": "https://huggingface.co/alvdansen/frosting_lane_flux/resolve/main/images/content%20-%202024-08-11T010011.238.jpeg",
1430
+ "title": "Frosting Lane",
1431
+ "repo": "alvdansen/frosting_lane_flux",
1432
+ "trigger_word": "frstingln illustration"
1433
+ },
1434
+ #166
1435
+ {
1436
+ "image": "https://huggingface.co/prithivMLmods/Flux-Realism-FineDetailed/resolve/main/images/FD2.png",
1437
+ "title": "Fine Detailed Character",
1438
+ "repo": "prithivMLmods/Flux-Realism-FineDetailed",
1439
+ "weights": "Flux-Realism-FineDetailed.safetensors",
1440
+ "trigger_word": "Fine Detailed"
1441
+ },
1442
+ #167
1443
+ {
1444
+ "image": "https://huggingface.co/prithivMLmods/Aura-9999/resolve/main/images/A3.png",
1445
+ "title": "Aura 9999+",
1446
+ "repo": "prithivMLmods/Aura-9999",
1447
+ "weights": "Aura-9999.safetensors",
1448
+ "trigger_word": "Aura 9999"
1449
+ },
1450
+ #168
1451
+ {
1452
+ "image": "https://huggingface.co/prithivMLmods/Pastel-BG-Flux-LoRA/resolve/main/images/PB2.png",
1453
+ "title": "Pastel BG",
1454
+ "repo": "prithivMLmods/Pastel-BG-Flux-LoRA",
1455
+ "weights": "Pastel-BG.safetensors",
1456
+ "trigger_word": "Pastel BG"
1457
+ },
1458
+ #169
1459
+ {
1460
+ "image": "https://huggingface.co/prithivMLmods/Green-Cartoon-Flux-LoRA/resolve/main/images/GC1.png",
1461
+ "title": "Green Cartoon",
1462
+ "repo": "prithivMLmods/Green-Cartoon-Flux-LoRA",
1463
+ "weights": "Green-Cartoon.safetensors",
1464
+ "trigger_word": "Green Cartoon"
1465
+ },
1466
+ #170
1467
+ {
1468
+ "image": "https://huggingface.co/prithivMLmods/Retro-Pixel-Flux-LoRA/resolve/main/images/RP1.png",
1469
+ "title": "Retro Pixel",
1470
+ "repo": "prithivMLmods/Retro-Pixel-Flux-LoRA",
1471
+ "weights": "Retro-Pixel.safetensors",
1472
+ "trigger_word": "Retro Pixel"
1473
+ },
1474
+ #171
1475
+ {
1476
+ "image": "https://huggingface.co/prithivMLmods/Teen-Outfit/resolve/main/images/TO2.png",
1477
+ "title": "Teen Outfit",
1478
+ "repo": "prithivMLmods/Teen-Outfit",
1479
+ "weights": "Teen-Outfit.safetensors",
1480
+ "trigger_word": "Teen Outfit"
1481
+ },
1482
+ #172
1483
+ {
1484
+ "image": "https://huggingface.co/prithivMLmods/CAnime-LoRA/resolve/main/images/CA3.png",
1485
+ "title": "CAnime",
1486
+ "repo": "prithivMLmods/CAnime-LoRA",
1487
+ "weights": "CAnime.safetensors",
1488
+ "trigger_word": "CAnime"
1489
+ },
1490
+ #173
1491
+ {
1492
+ "image": "https://huggingface.co/prithivMLmods/Super-Pencil-Flux-LoRA/resolve/main/images/SP1.png",
1493
+ "title": "Simple Pencil",
1494
+ "repo": "prithivMLmods/Super-Pencil-Flux-LoRA",
1495
+ "weights": "Pencil.safetensors",
1496
+ "trigger_word": "Simple Pencil"
1497
+ },
1498
+ #174
1499
+ {
1500
+ "image": "https://huggingface.co/martintomov/retrofuturism-flux/resolve/main/images/2e40deba-858e-454f-ae1c-d1ba2adb6a65.jpeg",
1501
+ "title": "Retro futurism",
1502
+ "repo": "martintomov/retrofuturism-flux",
1503
+ "weights": "retrofuturism_flux_lora_martintomov_v1.safetensors",
1504
+ "trigger_word": "retrofuturism"
1505
+ },
1506
+ #175
1507
+ {
1508
+ "image": "https://huggingface.co/Bootoshi/retroanime/resolve/main/images/9f21dffe-c4da-46c0-b0a6-e06257cf98d6.webp",
1509
+ "title": "Retro Anime",
1510
+ "repo": "Bootoshi/retroanime",
1511
+ "weights": "RetroAnimeFluxV1.safetensors",
1512
+ "trigger_word": "retro anime"
1513
+ },
1514
+ #176
1515
+ {
1516
+ "image": "https://huggingface.co/alvdansen/plushy-world-flux/resolve/main/images/ComfyUI_00666_%20(1).png",
1517
+ "title": "Plushy world",
1518
+ "repo": "alvdansen/plushy-world-flux",
1519
+ "weights": "plushy_world_flux_araminta_k.safetensors",
1520
+ "trigger_word": "3dcndylnd style"
1521
+ },
1522
+ #177
1523
+ {
1524
+ "image": "https://huggingface.co/renderartist/ROYGBIVFlux/resolve/main/images/ComfyUI_temp_qpxhm_00154_.png",
1525
+ "title": "ROYGBIVFlux",
1526
+ "repo": "renderartist/ROYGBIVFlux",
1527
+ "weights": "ROYGBIV_Flux_v1_renderartist.safetensors",
1528
+ "trigger_word": "r0ygb1v, digital illustration, textured"
1529
+ },
1530
+ #178
1531
+ {
1532
+ "image": "https://huggingface.co/alvdansen/sonny-anime-flex/resolve/main/images/GLuFasaLyEoBaAUQMREVf_20b5cf5b178a404296978e360a9ac435.png",
1533
+ "title": "sonny anime",
1534
+ "repo": "alvdansen/sonny-anime-flex",
1535
+ "weights": "araminta_k_sonnyanime_fluxd_flex.safetensors",
1536
+ "trigger_word": "nm22 [style] style"
1537
+ },
1538
+ #179
1539
+ {
1540
+ "image": "https://huggingface.co/bingbangboom/flux_whimscape/resolve/main/images/2.png",
1541
+ "title": "flux whimscape",
1542
+ "repo": "bingbangboom/flux_whimscape",
1543
+ "weights": "WHMSCPE001.safetensors",
1544
+ "trigger_word": "illustration in the style of WHMSCPE001"
1545
+ },
1546
+ #180
1547
+ {
1548
+ "image": "https://huggingface.co/glif-loradex-trainer/AP123_movie_shots_ic_lora_experiment_v1/resolve/main/samples/1730923312010__000000500_1.jpg",
1549
+ "title": "movie shots ic lora",
1550
+ "repo": "glif-loradex-trainer/AP123_movie_shots_ic_lora_experiment_v1",
1551
+ "weights": "movie_shots_ic_lora_experiment_v1.safetensors",
1552
+ "trigger_word": "MOVIE-SHOTS"
1553
+ },
1554
+ #181
1555
+ {
1556
+ "image": "https://huggingface.co/glif/LiDAR-Vision/resolve/main/images/f8f1995e-c583-425b-b73a-f3e873ce1005.png",
1557
+ "title": "LiDAR",
1558
+ "repo": "glif/LiDAR-Vision",
1559
+ "weights": "Lidar.safetensors",
1560
+ "trigger_word": "L1d4r"
1561
+ },
1562
+ #182
1563
+ {
1564
+ "image": "https://huggingface.co/prithivMLmods/Canopus-Flux-LoRA-Hoodies/resolve/main/images/XXX.png",
1565
+ "title": "Hoodies",
1566
+ "repo": "prithivMLmods/Canopus-Flux-LoRA-Hoodies",
1567
+ "weights": "Canopus-Flux-LoRA-Hoodies.safetensors",
1568
+ "trigger_word": "Hoodie"
1569
+ },
1570
+ #183
1571
+ {
1572
+ "image": "https://huggingface.co/dvyio/flux-lora-rdr2/resolve/main/images/RTqPoC9s0M1wNhago27OV_dda06f47ee764202aa5e55efa923b94e.jpg",
1573
+ "title": "World of RDR",
1574
+ "repo": "dvyio/flux-lora-rdr2",
1575
+ "weights": "eb79a593332f40458ea36fe0782f01a4_pytorch_lora_weights.safetensors",
1576
+ "trigger_word": "in the style of RDRGM"
1577
+ },
1578
+ #184
1579
+ {
1580
+ "image": "https://huggingface.co/Fihade/Retro-Collage-Art-Flux-Dev/resolve/main/images/005.jpeg",
1581
+ "title": "Retro Collage Art",
1582
+ "repo": "Fihade/Retro-Collage-Art-Flux-Dev",
1583
+ "weights": "flux_dev_ff_collage_artstyle.safetensors",
1584
+ "trigger_word": "ff-collage"
1585
+ },
1586
+ #185
1587
+ {
1588
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Quote-LoRA/resolve/main/images/QQ2.png",
1589
+ "title": "Quote",
1590
+ "repo": "prithivMLmods/Flux.1-Dev-Quote-LoRA",
1591
+ "weights": "quoter001.safetensors",
1592
+ "trigger_word": "quoter"
1593
+ },
1594
+ #186
1595
+ {
1596
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Stamp-Art-LoRA/resolve/main/images/SS2.png",
1597
+ "title": "Stamp",
1598
+ "repo": "prithivMLmods/Flux.1-Dev-Stamp-Art-LoRA",
1599
+ "weights": "stam9.safetensors",
1600
+ "trigger_word": "stam9"
1601
+ },
1602
+ #187
1603
+ {
1604
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Hand-Sticky-LoRA/resolve/main/images/H3.png",
1605
+ "title": "Hand Sticky",
1606
+ "repo": "prithivMLmods/Flux.1-Dev-Hand-Sticky-LoRA",
1607
+ "weights": "handstick69.safetensors",
1608
+ "trigger_word": "handstick69"
1609
+ },
1610
+ #188
1611
+ {
1612
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Poster-HQ-LoRA/resolve/main/images/PP2.png",
1613
+ "title": "Poster Foss",
1614
+ "repo": "prithivMLmods/Flux.1-Dev-Poster-HQ-LoRA",
1615
+ "weights": "poster-foss.safetensors",
1616
+ "trigger_word": "poster foss"
1617
+ },
1618
+ #189
1619
+ {
1620
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Ctoon-LoRA/resolve/main/images/C3.png",
1621
+ "title": "Ctoon",
1622
+ "repo": "prithivMLmods/Flux.1-Dev-Ctoon-LoRA",
1623
+ "weights": "ctoon.safetensors",
1624
+ "trigger_word": "ctoon"
1625
+ },
1626
+ #190
1627
+ {
1628
+ "image": "https://huggingface.co/prithivMLmods/Flux-C33-Design-LoRA/resolve/main/images/3.png",
1629
+ "title": "C33 Design",
1630
+ "repo": "prithivMLmods/Flux-C33-Design-LoRA",
1631
+ "weights": "C33.safetensors",
1632
+ "trigger_word": "C33 Design"
1633
+ },
1634
+ #191
1635
+ {
1636
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Indo-Realism-LoRA/resolve/main/images/333.png",
1637
+ "title": "Indo Realism",
1638
+ "repo": "prithivMLmods/Flux.1-Dev-Indo-Realism-LoRA",
1639
+ "weights": "indo-realism.safetensors",
1640
+ "trigger_word": "indo-realism"
1641
+ },
1642
+ #192
1643
+ {
1644
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Sketch-Card-LoRA/resolve/main/images/SC2.png",
1645
+ "title": "Sketch Card",
1646
+ "repo": "prithivMLmods/Flux.1-Dev-Sketch-Card-LoRA",
1647
+ "weights": "sketchcard.safetensors",
1648
+ "trigger_word": "sketch card"
1649
+ },
1650
+ #193
1651
+ {
1652
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA/resolve/main/images/MB1.png",
1653
+ "title": "Movie Board",
1654
+ "repo": "prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA",
1655
+ "weights": "movieboard.safetensors",
1656
+ "trigger_word": "movieboard"
1657
+ },
1658
+ #194
1659
+ {
1660
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Pov-DoorEye-LoRA/resolve/main/images/L4.png",
1661
+ "title": "Door Eye View",
1662
+ "repo": "prithivMLmods/Flux.1-Dev-Pov-DoorEye-LoRA",
1663
+ "weights": "look-in-2.safetensors",
1664
+ "trigger_word": "look in 2"
1665
+ },
1666
+ #195
1667
+ {
1668
+ "image": "https://huggingface.co/alvdansen/enna-sketch-style/resolve/main/images/out-0%20(23).webp",
1669
+ "title": "Enna Sketch",
1670
+ "repo": "alvdansen/enna-sketch-style",
1671
+ "weights": "enna_sketch_style_araminta_k.safetensors",
1672
+ "trigger_word": "sketch illustration style"
1673
+ },
1674
+ #196
1675
+ {
1676
+ "image": "https://huggingface.co/jbilcke-hf/flux-dev-panorama-lora-2/resolve/main/samples/HDRI%20panoramic%20view%20of%20TOK%2C%20visiting%20an%20amusement%20park%20about%20harry%20potter.webp",
1677
+ "title": "Panorama",
1678
+ "repo": "jbilcke-hf/flux-dev-panorama-lora-2",
1679
+ "weights": "flux_train_replicate.safetensors",
1680
+ "trigger_word": "HDRI panoramic view of TOK"
1681
+ },
1682
+ #197
1683
+ {
1684
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Micro-landscape-on-Mobile-Phone/resolve/main/images/a29b8763a8f733dea09c1ab07a42263ef6e304cb81be3f5c97fbf8f6.jpg",
1685
+ "title": "Micro Landscape",
1686
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Micro-landscape-on-Mobile-Phone",
1687
+ "weights": "FLUX-dev-lora-micro-landscape.safetensors",
1688
+ "trigger_word": "miniature stereoscopic scene"
1689
+ },
1690
+ #198
1691
+ {
1692
+ "image": "https://huggingface.co/glif-loradex-trainer/goldenark__Ancient_Greece_Watercolor_Sketch_Style/resolve/main/samples/1727152322975__000002000_0.jpg",
1693
+ "title": "Ancient Greece Watercolor",
1694
+ "repo": "glif-loradex-trainer/goldenark__Ancient_Greece_Watercolor_Sketch_Style",
1695
+ "weights": "Ancient_Greece_Watercolor_Sketch_Style.safetensors",
1696
+ "trigger_word": "AncientWaterColorStyle"
1697
+ },
1698
+ #199
1699
+ {
1700
+ "image": "https://huggingface.co/glif-loradex-trainer/i12bp8_appelsiensam_mii_v1/resolve/main/samples/1731918886531__000003000_0.jpg",
1701
+ "title": "M11 PPLSNSM",
1702
+ "repo": "glif-loradex-trainer/i12bp8_appelsiensam_mii_v1",
1703
+ "weights": "appelsiensam_mii_v1.safetensors",
1704
+ "trigger_word": "M11_PPLSNSM"
1705
+ },
1706
+ #200
1707
+ {
1708
+ "image": "https://huggingface.co/glif-loradex-trainer/an303042_RisographPrint_v1/resolve/main/samples/1731852835625__000003000_5.jpg",
1709
+ "title": "RisographPrint",
1710
+ "repo": "glif-loradex-trainer/an303042_RisographPrint_v1",
1711
+ "weights": "RisographPrint_v1.safetensors",
1712
+ "trigger_word": "rsgrf , risograph"
1713
+ },
1714
+ #201
1715
+ {
1716
+ "image": "https://huggingface.co/gokaygokay/Flux-White-Background-LoRA/resolve/main/images/example_mtojzmerf.png",
1717
+ "title": "White Background",
1718
+ "repo": "gokaygokay/Flux-White-Background-LoRA",
1719
+ "weights": "80cfbf52faf541d49c6abfe1ac571112_lora.safetensors",
1720
+ "trigger_word": "in the middle ,white background"
1721
+ },
1722
+ #202
1723
+ {
1724
+ "image": "https://huggingface.co/glif/Gesture-Draw/resolve/main/images/cf8697fb-d6b4-4684-8a1d-82beb9d266ed.jpg",
1725
+ "title": "Gesture Draw",
1726
+ "repo": "glif/Gesture-Draw",
1727
+ "weights": "Gesture_Draw_v1.safetensors",
1728
+ "trigger_word": "gstdrw style"
1729
+ },
1730
+ #203
1731
+ {
1732
+ "image": "https://huggingface.co/MuninStudio/FLUX.1-dev-LoRA-Hard-Flash/resolve/main/images/02.jpg",
1733
+ "title": "Hard Flash",
1734
+ "repo": "MuninStudio/FLUX.1-dev-LoRA-Hard-Flash",
1735
+ "weights": "HRDFLS.safetensors",
1736
+ "trigger_word": "HRDFLS"
1737
+ },
1738
+ #204
1739
+ {
1740
+ "image": "https://huggingface.co/dvyio/flux-lora-the-sims/resolve/main/images/dunBAVBsALOepaE_dsWFI_6b0fef6b0fc4472aa07d00edea7c75b3.jpg",
1741
+ "title": "SIMS",
1742
+ "repo": "dvyio/flux-lora-the-sims",
1743
+ "weights": "011ed14848b3408c8d70d3ecfa14f122_lora.safetensors",
1744
+ "trigger_word": "video game screenshot in the style of THSMS"
1745
+ },
1746
+ #205
1747
+ {
1748
+ "image": "https://huggingface.co/UmeAiRT/FLUX.1-dev-LoRA-Ume_Sky/resolve/main/images/flux_00171_.png",
1749
+ "title": "Umesky",
1750
+ "repo": "UmeAiRT/FLUX.1-dev-LoRA-Ume_Sky",
1751
+ "weights": "ume_sky_v2.safetensors",
1752
+ "trigger_word": "umesky"
1753
+ },
1754
+ #206
1755
+ {
1756
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Realtime-Toon-Mix/resolve/main/images/T1.png",
1757
+ "title": "Realtime Toon Mix",
1758
+ "repo": "prithivMLmods/Flux.1-Dev-Realtime-Toon-Mix",
1759
+ "weights": "toon-mix.safetensors",
1760
+ "trigger_word": "toon mix"
1761
+ },
1762
+ #207
1763
+ {
1764
+ "image": "https://huggingface.co/oshtz/flux-pointcrayonstyle/resolve/main/images/pointcrayonstyle%20illustration%2C%20at%20a%20lighthouse%2C%20the%20ambiance%20is%20exotic%20and%20mysterious.png",
1765
+ "title": "Pointcrayonstyle",
1766
+ "repo": "oshtz/flux-pointcrayonstyle",
1767
+ "weights": "flux-pointcrayonstyle.safetensors",
1768
+ "trigger_word": "pointcrayonstyle"
1769
+ },
1770
+ #208
1771
+ {
1772
+ "image": "https://huggingface.co/Purz/vhs-box/resolve/main/33727059.jpeg",
1773
+ "title": "VSH Box",
1774
+ "repo": "Purz/vhs-box",
1775
+ "weights": "purz-vhs_box.safetensors",
1776
+ "trigger_word": "vhs_box"
1777
+ },
1778
+ #209
1779
+ {
1780
+ "image": "https://huggingface.co/nerijs/flux_prettyshot_v1/resolve/main/images/image_5.png",
1781
+ "title": "Prettyshot",
1782
+ "repo": "nerijs/flux_prettyshot_v1",
1783
+ "weights": "flux_prettyshot_v1.safetensors",
1784
+ "trigger_word": "pr3ttysh0t"
1785
+ },
1786
+ #210
1787
+ {
1788
+ "image": "https://huggingface.co/glif-loradex-trainer/insectagon_pipo_hippo1/resolve/main/samples/1729839793051__000001500_1.jpg",
1789
+ "title": "Insectagon pipo",
1790
+ "repo": "glif-loradex-trainer/insectagon_pipo_hippo1",
1791
+ "weights": "pipo_hippo1.safetensors",
1792
+ "trigger_word": "pipo_meme"
1793
+ },
1794
+ #211
1795
+ {
1796
+ "image": "https://huggingface.co/prithivMLmods/Flux-Polaroid-Plus/resolve/main/images/P1.png",
1797
+ "title": "Polaroid Plus",
1798
+ "repo": "prithivMLmods/Flux-Polaroid-Plus",
1799
+ "weights": "polaroid-plus.safetensors",
1800
+ "trigger_word": "Polaroid Collage"
1801
+ },
1802
+ #212
1803
+ {
1804
+ "image": "https://huggingface.co/prithivMLmods/Flux-Product-Ad-Backdrop/resolve/main/images/PA1.png",
1805
+ "title": "Product Ad",
1806
+ "repo": "prithivMLmods/Flux-Product-Ad-Backdrop",
1807
+ "weights": "Prod-Ad.safetensors",
1808
+ "trigger_word": "Product Ad"
1809
+ },
1810
+ #213
1811
+ {
1812
+ "image": "https://huggingface.co/prithivMLmods/Flux-Art-Nightmare-99/resolve/main/images/NM4.png",
1813
+ "title": "Nightmare 99",
1814
+ "repo": "prithivMLmods/Flux-Art-Nightmare-99",
1815
+ "weights": "nm99.safetensors",
1816
+ "trigger_word": "nm99"
1817
+ },
1818
+ #214
1819
+ {
1820
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Frosted-Container-LoRA/resolve/main/images/FG1.png",
1821
+ "title": "Frosted Container",
1822
+ "repo": "prithivMLmods/Flux.1-Dev-Frosted-Container-LoRA",
1823
+ "weights": "frosted-gc.safetensors",
1824
+ "trigger_word": "frosted GC"
1825
+ },
1826
+ #215
1827
+ {
1828
+ "image": "https://huggingface.co/glif-loradex-trainer/swap_magenta_kuki_roblox/resolve/main/samples/1731068408259__000001500_4.jpg",
1829
+ "title": "Magenta Kuki Roblox",
1830
+ "repo": "glif-loradex-trainer/swap_magenta_kuki_roblox",
1831
+ "weights": "magenta_kuki_roblox.safetensors",
1832
+ "trigger_word": "kuki_magenta, roblox"
1833
+ },
1834
+ #216
1835
+ {
1836
+ "image": "https://huggingface.co/glif-loradex-trainer/maxxd4240_PleinAir/resolve/main/samples/1730493095161__000003000_4.jpg",
1837
+ "title": "Plein Air",
1838
+ "repo": "glif-loradex-trainer/maxxd4240_PleinAir",
1839
+ "weights": "PleinAir.safetensors",
1840
+ "trigger_word": "P1e!n"
1841
+ },
1842
+ #217
1843
+ {
1844
+ "image": "https://huggingface.co/prithivMLmods/Flux-GArt-LoRA/resolve/main/images/G2.png",
1845
+ "title": "GArt",
1846
+ "repo": "prithivMLmods/Flux-GArt-LoRA",
1847
+ "weights": "GArt.safetensors",
1848
+ "trigger_word": "GArt"
1849
+ },
1850
+ #218
1851
+ {
1852
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Capybara-HF/resolve/main/images/C2.png",
1853
+ "title": "Capybara HF",
1854
+ "repo": "strangerzonehf/Flux-Super-Capybara-HF",
1855
+ "weights": "capybara-hf.safetensors",
1856
+ "trigger_word": "capybara hf"
1857
+ },
1858
+ #219
1859
+ {
1860
+ "image": "https://huggingface.co/prithivMLmods/Flux-Fine-Detail-LoRA/resolve/main/images/SR1.png",
1861
+ "title": "Fine Detail",
1862
+ "repo": "prithivMLmods/Flux-Fine-Detail-LoRA",
1863
+ "weights": "Fine-Detail.safetensors",
1864
+ "trigger_word": "Super Detail"
1865
+ },
1866
+ #220
1867
+ {
1868
+ "image": "https://huggingface.co/gokaygokay/Flux-Digital-Backgrounds-LoRA/resolve/main/images/image1.jpg",
1869
+ "title": "Digital Backgrounds",
1870
+ "repo": "gokaygokay/Flux-Digital-Backgrounds-LoRA",
1871
+ "weights": "digital_background_lora.safetensors",
1872
+ "trigger_word": "dgtlbg"
1873
+ },
1874
+ #221
1875
+ {
1876
+ "image": "https://huggingface.co/gokaygokay/Flux-Realistic-Backgrounds-LoRA/resolve/main/images/image1.jpg",
1877
+ "title": "Realistic Backgrounds",
1878
+ "repo": "gokaygokay/Flux-Realistic-Backgrounds-LoRA",
1879
+ "weights": "realistic_background_lora.safetensors",
1880
+ "trigger_word": "rlstcbg"
1881
+ },
1882
+ #222
1883
+ {
1884
+ "image": "https://huggingface.co/prithivMLmods/Flux-Lego-Ref-LoRA/resolve/main/images/2.png",
1885
+ "title": "LEGO",
1886
+ "repo": "prithivMLmods/Flux-Lego-Ref-LoRA",
1887
+ "weights": "Lego.safetensors",
1888
+ "trigger_word": "lego --fref --89890"
1889
+ },
1890
+ #223
1891
+ {
1892
+ "image": "https://huggingface.co/strangerzonehf/Flux-3DXL-Partfile-0002/resolve/main/images/44.png",
1893
+ "title": "3DXLP2",
1894
+ "repo": "strangerzonehf/Flux-3DXL-Partfile-0002",
1895
+ "weights": "3DXLP2.safetensors",
1896
+ "trigger_word": "3DXLP2"
1897
+ },
1898
+
1899
+ #add new
1900
+ ]
flux_app/lora_handling.py ADDED
@@ -0,0 +1,314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # lora_handling.py
2
+ import torch
3
+ from typing import Any, Dict, List, Optional, Union
4
+ import gradio as gr
5
+ from huggingface_hub import ModelCard, HfFileSystem
6
+ from flux_app.utilities import calculate_shift, retrieve_timesteps, calculateDuration # Absolute import
7
+ import numpy as np
8
+ from PIL import Image
9
+ import copy
10
+ from flux_app.lora import loras
11
+ # FLUX pipeline (continued from previous response)
12
+ @torch.inference_mode()
13
+ def flux_pipe_call_that_returns_an_iterable_of_images(
14
+ self,
15
+ prompt: Union[str, List[str]] = None,
16
+ prompt_2: Optional[Union[str, List[str]]] = None,
17
+ height: Optional[int] = None,
18
+ width: Optional[int] = None,
19
+ num_inference_steps: int = 28,
20
+ timesteps: List[int] = None,
21
+ guidance_scale: float = 3.5,
22
+ num_images_per_prompt: Optional[int] = 1,
23
+ generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
24
+ latents: Optional[torch.FloatTensor] = None,
25
+ prompt_embeds: Optional[torch.FloatTensor] = None,
26
+ pooled_prompt_embeds: Optional[torch.FloatTensor] = None,
27
+ output_type: Optional[str] = "pil",
28
+ return_dict: bool = True,
29
+ joint_attention_kwargs: Optional[Dict[str, Any]] = None,
30
+ max_sequence_length: int = 512,
31
+ good_vae: Optional[Any] = None,
32
+ ):
33
+ height = height or self.default_sample_size * self.vae_scale_factor
34
+ width = width or self.default_sample_size * self.vae_scale_factor
35
+
36
+ self.check_inputs(
37
+ prompt,
38
+ prompt_2,
39
+ height,
40
+ width,
41
+ prompt_embeds=prompt_embeds,
42
+ pooled_prompt_embeds=pooled_prompt_embeds,
43
+ max_sequence_length=max_sequence_length,
44
+ )
45
+
46
+ self._guidance_scale = guidance_scale
47
+ self._joint_attention_kwargs = joint_attention_kwargs
48
+ self._interrupt = False
49
+
50
+ batch_size = 1 if isinstance(prompt, str) else len(prompt)
51
+ device = self._execution_device
52
+
53
+ lora_scale = joint_attention_kwargs.get("scale", None) if joint_attention_kwargs is not None else None
54
+ prompt_embeds, pooled_prompt_embeds, text_ids = self.encode_prompt(
55
+ prompt=prompt,
56
+ prompt_2=prompt_2,
57
+ prompt_embeds=prompt_embeds,
58
+ pooled_prompt_embeds=pooled_prompt_embeds,
59
+ device=device,
60
+ num_images_per_prompt=num_images_per_prompt,
61
+ max_sequence_length=max_sequence_length,
62
+ lora_scale=lora_scale,
63
+ )
64
+
65
+ num_channels_latents = self.transformer.config.in_channels // 4
66
+ latents, latent_image_ids = self.prepare_latents(
67
+ batch_size * num_images_per_prompt,
68
+ num_channels_latents,
69
+ height,
70
+ width,
71
+ prompt_embeds.dtype,
72
+ device,
73
+ generator,
74
+ latents,
75
+ )
76
+
77
+ sigmas = np.linspace(1.0, 1 / num_inference_steps, num_inference_steps)
78
+ image_seq_len = latents.shape[1]
79
+ mu = calculate_shift(
80
+ image_seq_len,
81
+ self.scheduler.config.base_image_seq_len,
82
+ self.scheduler.config.max_image_seq_len,
83
+ self.scheduler.config.base_shift,
84
+ self.scheduler.config.max_shift,
85
+ )
86
+ timesteps, num_inference_steps = retrieve_timesteps(
87
+ self.scheduler,
88
+ num_inference_steps,
89
+ device,
90
+ timesteps,
91
+ sigmas,
92
+ mu=mu,
93
+ )
94
+ self._num_timesteps = len(timesteps)
95
+
96
+ guidance = torch.full([1], guidance_scale, device=device, dtype=torch.float32).expand(latents.shape[0]) if self.transformer.config.guidance_embeds else None
97
+
98
+ for i, t in enumerate(timesteps):
99
+ if self.interrupt:
100
+ continue
101
+
102
+ timestep = t.expand(latents.shape[0]).to(latents.dtype)
103
+
104
+ noise_pred = self.transformer(
105
+ hidden_states=latents,
106
+ timestep=timestep / 1000,
107
+ guidance=guidance,
108
+ pooled_projections=pooled_prompt_embeds,
109
+ encoder_hidden_states=prompt_embeds,
110
+ txt_ids=text_ids,
111
+ img_ids=latent_image_ids,
112
+ joint_attention_kwargs=self.joint_attention_kwargs,
113
+ return_dict=False,
114
+ )[0]
115
+
116
+ latents_for_image = self._unpack_latents(latents, height, width, self.vae_scale_factor)
117
+ latents_for_image = (latents_for_image / self.vae.config.scaling_factor) + self.vae.config.shift_factor
118
+ image = self.vae.decode(latents_for_image, return_dict=False)[0]
119
+ yield self.image_processor.postprocess(image, output_type=output_type)[0]
120
+ latents = self.scheduler.step(noise_pred, t, latents, return_dict=False)[0]
121
+ torch.cuda.empty_cache()
122
+
123
+ latents = self._unpack_latents(latents, height, width, self.vae_scale_factor)
124
+ latents = (latents / good_vae.config.scaling_factor) + good_vae.config.shift_factor
125
+ image = good_vae.decode(latents, return_dict=False)[0]
126
+ self.maybe_free_model_hooks()
127
+ torch.cuda.empty_cache()
128
+ yield self.image_processor.postprocess(image, output_type=output_type)[0]
129
+
130
+
131
+ def get_huggingface_safetensors(link: str) -> tuple[str, str, str, str, str]:
132
+ """
133
+ Extracts LoRA information from a Hugging Face model card.
134
+
135
+ Args:
136
+ link: The Hugging Face model repository URL or ID (e.g., "user/repo" or
137
+ "https://huggingface.co/user/repo").
138
+
139
+ Returns:
140
+ A tuple containing:
141
+ - title (str): The repository name.
142
+ - repo (str): The full repository ID ("user/repo").
143
+ - path (str): The filename of the .safetensors file.
144
+ - trigger_word (str): The instance prompt (trigger word) from the model card.
145
+ - image_url (str): URL of a preview image, if found.
146
+
147
+ Raises:
148
+ Exception: If the provided link is not a valid FLUX LoRA repository.
149
+ """
150
+ split_link = link.split("/")
151
+ if len(split_link) == 2:
152
+ model_card = ModelCard.load(link)
153
+ base_model = model_card.data.get("base_model")
154
+ print(base_model)
155
+
156
+ # Allows Both FLUX.1-dev and FLUX.1-schnell
157
+ if base_model not in ("black-forest-labs/FLUX.1-dev", "black-forest-labs/FLUX.1-schnell"):
158
+ raise Exception("Flux LoRA Not Found!")
159
+
160
+ image_path = model_card.data.get("widget", [{}])[0].get("output", {}).get("url", None)
161
+ trigger_word = model_card.data.get("instance_prompt", "")
162
+ image_url = f"https://huggingface.co/{link}/resolve/main/{image_path}" if image_path else None
163
+ fs = HfFileSystem()
164
+ try:
165
+ list_of_files = fs.ls(link, detail=False)
166
+ for file in list_of_files:
167
+ if file.endswith(".safetensors"):
168
+ safetensors_name = file.split("/")[-1]
169
+ if not image_url and file.lower().endswith((".jpg", ".jpeg", ".png", ".webp")):
170
+ image_elements = file.split("/")
171
+ image_url = f"https://huggingface.co/{link}/resolve/main/{image_elements[-1]}"
172
+ return split_link[1], link, safetensors_name, trigger_word, image_url # Return as soon as .safetensors is found
173
+ except Exception as e:
174
+ print(e)
175
+ raise Exception(f"You didn't include a link neither a valid Hugging Face repository with a *.safetensors LoRA") # More concise exception
176
+ else: #if the links is not complete
177
+ raise Exception(f"You didn't include a link neither a valid Hugging Face repository with a *.safetensors LoRA")
178
+
179
+ def check_custom_model(link: str) -> tuple[str, str, str, str, str]:
180
+ """
181
+ Checks if the provided link is a Hugging Face URL and extracts LoRA info.
182
+
183
+ Args:
184
+ link: The URL or repository ID.
185
+
186
+ Returns:
187
+ The same tuple as `get_huggingface_safetensors`.
188
+ """
189
+ if link.startswith("https://"):
190
+ if link.startswith("https://huggingface.co") or link.startswith("https://www.huggingface.co"):
191
+ link_split = link.split("huggingface.co/")
192
+ return get_huggingface_safetensors(link_split[1])
193
+ return get_huggingface_safetensors(link)
194
+
195
+
196
+
197
+ def create_lora_card(title: str, repo: str, trigger_word: str, image: str) -> str:
198
+ """
199
+ Generates HTML for a LoRA card in the Gradio UI.
200
+ """
201
+ trigger_word_info = (
202
+ f"Using: <code><b>{trigger_word}</code></b> as the trigger word"
203
+ if trigger_word
204
+ else "No trigger word found. If there's a trigger word, include it in your prompt"
205
+ )
206
+ return f'''
207
+ <div class="custom_lora_card">
208
+ <span>Loaded custom LoRA:</span>
209
+ <div class="card_internal">
210
+ <img src="{image}" />
211
+ <div>
212
+ <h3>{title}</h3>
213
+ <small>{trigger_word_info}<br></small>
214
+ </div>
215
+ </div>
216
+ </div>
217
+ '''
218
+
219
+ def add_custom_lora(custom_lora: str, loras: list) -> tuple:
220
+ """Adds a custom LoRA to the list of available LoRAs."""
221
+ if custom_lora:
222
+ try:
223
+ title, repo, path, trigger_word, image = check_custom_model(custom_lora)
224
+ print(f"Loaded custom LoRA: {repo}")
225
+ card = create_lora_card(title, repo, trigger_word, image)
226
+
227
+ # Check if the repo is already in the list
228
+ existing_item_index = next((index for (index, item) in enumerate(loras) if item['repo'] == repo), None)
229
+ if existing_item_index is None: # Use 'is None' for comparison
230
+ new_item = {
231
+ "image": image,
232
+ "title": title,
233
+ "repo": repo,
234
+ "weights": path,
235
+ "trigger_word": trigger_word
236
+ }
237
+ print(new_item)
238
+ loras.append(new_item) # Append to the passed-in loras list
239
+ existing_item_index = len(loras) -1 #the index of new appended item
240
+
241
+
242
+ return gr.update(visible=True, value=card), gr.update(visible=True), gr.Gallery(selected_index=None), f"Custom: {path}", existing_item_index, trigger_word
243
+
244
+ except Exception as e:
245
+ print(f"Error loading LoRA: {e}") # Debugging
246
+ return gr.update(visible=True, value="Invalid LoRA"), gr.update(visible=False), gr.update(), "", None, ""
247
+
248
+ else:
249
+ return gr.update(visible=False), gr.update(visible=False), gr.update(), "", None, ""
250
+
251
+
252
+
253
+ def remove_custom_lora() -> tuple:
254
+ """Removes the custom LoRA from the UI."""
255
+ return gr.update(visible=False), gr.update(visible=False), gr.update(), "", None, ""
256
+
257
+ def prepare_prompt(prompt: str, selected_index: Optional[int], loras: List[Dict]) -> str:
258
+ """Combines the user prompt with the LoRA trigger word."""
259
+ if selected_index is None:
260
+ raise gr.Error("You must select a LoRA before proceeding.🧨")
261
+
262
+ selected_lora = loras[selected_index]
263
+ trigger_word = selected_lora.get("trigger_word") # Use get()
264
+
265
+ if trigger_word:
266
+ trigger_position = selected_lora.get("trigger_position", "append")
267
+ if trigger_position == "prepend":
268
+ prompt_mash = f"{trigger_word} {prompt}"
269
+ else:
270
+ prompt_mash = f"{prompt} {trigger_word}"
271
+ else:
272
+ prompt_mash = prompt
273
+ return prompt_mash
274
+
275
+ def unload_lora_weights(pipe, pipe_i2i):
276
+ """Unloads LoRA weights from both pipelines."""
277
+ if pipe is not None:
278
+ pipe.unload_lora_weights()
279
+ if pipe_i2i is not None:
280
+ pipe_i2i.unload_lora_weights()
281
+
282
+
283
+ def load_lora_weights_into_pipeline(pipe_to_use, lora_path: str, weight_name: Optional[str]):
284
+ """Loads LoRA weights into the specified pipeline."""
285
+ pipe_to_use.load_lora_weights(
286
+ lora_path,
287
+ weight_name=weight_name,
288
+ low_cpu_mem_usage=True
289
+ )
290
+
291
+
292
+ def update_selection(evt: gr.SelectData, width, height, loras):
293
+ """Updates the UI when a LoRA is selected from the gallery."""
294
+ selected_lora = loras[evt.index]
295
+ new_placeholder = f"Type a prompt for {selected_lora['title']}"
296
+ lora_repo = selected_lora["repo"]
297
+ updated_text = f"### Selected: [{lora_repo}](https://huggingface.co/{lora_repo}) ✅"
298
+ if "aspect" in selected_lora:
299
+ if selected_lora["aspect"] == "portrait":
300
+ width = 768
301
+ height = 1024
302
+ elif selected_lora["aspect"] == "landscape":
303
+ width = 1024
304
+ height = 768
305
+ else:
306
+ width = 1024
307
+ height = 1024
308
+ return (
309
+ gr.update(placeholder=new_placeholder),
310
+ updated_text,
311
+ evt.index,
312
+ width,
313
+ height,
314
+ )
flux_app/utilities.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # utilities.py
2
+
3
+ import torch
4
+ from typing import Optional, Union, List, Any, Dict
5
+ import numpy as np
6
+ from diffusers.utils import load_image
7
+ import random
8
+ import time
9
+
10
+ def calculate_shift(
11
+ image_seq_len,
12
+ base_seq_len: int = 256,
13
+ max_seq_len: int = 4096,
14
+ base_shift: float = 0.5,
15
+ max_shift: float = 1.16,
16
+ ):
17
+ m = (max_shift - base_shift) / (max_seq_len - base_seq_len)
18
+ b = base_shift - m * base_seq_len
19
+ mu = image_seq_len * m + b
20
+ return mu
21
+
22
+ def retrieve_timesteps(
23
+ scheduler,
24
+ num_inference_steps: Optional[int] = None,
25
+ device: Optional[Union[str, torch.device]] = None,
26
+ timesteps: Optional[List[int]] = None,
27
+ sigmas: Optional[List[float]] = None,
28
+ **kwargs,
29
+ ):
30
+ if timesteps is not None and sigmas is not None:
31
+ raise ValueError("Only one of `timesteps` or `sigmas` can be passed. Please choose one to set custom values")
32
+ if timesteps is not None:
33
+ scheduler.set_timesteps(timesteps=timesteps, device=device, **kwargs)
34
+ timesteps = scheduler.timesteps
35
+ num_inference_steps = len(timesteps)
36
+ elif sigmas is not None:
37
+ scheduler.set_timesteps(sigmas=sigmas, device=device, **kwargs)
38
+ timesteps = scheduler.timesteps
39
+ num_inference_steps = len(timesteps)
40
+ else:
41
+ scheduler.set_timesteps(num_inference_steps, device=device, **kwargs)
42
+ timesteps = scheduler.timesteps
43
+ return timesteps, num_inference_steps
44
+
45
+
46
+ def load_image_from_path(image_path: str):
47
+ """Loads an image from a given file path."""
48
+ return load_image(image_path)
49
+
50
+ def randomize_seed_if_needed(randomize_seed: bool, seed: int, max_seed: int) -> int:
51
+ """Randomizes the seed if requested."""
52
+ if randomize_seed:
53
+ return random.randint(0, max_seed)
54
+ return seed
55
+
56
+ class calculateDuration:
57
+ def __init__(self, activity_name=""):
58
+ self.activity_name = activity_name
59
+
60
+ def __enter__(self):
61
+ self.start_time = time.time()
62
+ return self
63
+
64
+ def __exit__(self, exc_type, exc_value, traceback):
65
+ self.end_time = time.time()
66
+ self.elapsed_time = self.end_time - self.start_time
67
+ if self.activity_name:
68
+ print(f"Elapsed time for {self.activity_name}: {self.elapsed_time:.6f} seconds")
69
+ else:
70
+ print(f"Elapsed time: {self.elapsed_time:.6f} seconds")