prithivMLmods commited on
Commit
86ffa71
·
1 Parent(s): ba4c9d6

Conversion V1

Browse files

Update README.md

Update app.py

Upload version_info.py

Pre V1 conversion
Update requirements.txt

Update app.py

.gitattributes CHANGED
@@ -33,3 +33,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ *.png filter=lfs diff=lfs merge=lfs -text
37
+ *.jpg filter=lfs diff=lfs merge=lfs -text
38
+ *.PNG filter=lfs diff=lfs merge=lfs -text
39
+ *.ttf filter=lfs diff=lfs merge=lfs -text
40
+ *.xcf filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ################################################################################
2
+ # This .gitignore file was automatically created by Microsoft(R) Visual Studio.
3
+ ################################################################################
4
+
5
+ # C extensions
6
+ *.so
7
+
8
+ # Distribution / packaging
9
+ .Python
10
+ build/
11
+ develop-eggs/
12
+ dist/
13
+ downloads/
14
+ eggs/
15
+ .eggs/
16
+ lib/
17
+ lib64/
18
+ parts/
19
+ sdist/
20
+ var/
21
+ wheels/
22
+ share/python-wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+ MANIFEST
27
+
28
+ # PyInstaller
29
+ # Usually these files are written by a python script from a template
30
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit test / coverage reports
39
+ htmlcov/
40
+ .tox/
41
+ .nox/
42
+ .coverage
43
+ .coverage.*
44
+ .cache
45
+ nosetests.xml
46
+ coverage.xml
47
+ *.cover
48
+ *.py,cover
49
+ .hypothesis/
50
+ .pytest_cache/
51
+ cover/
52
+
53
+ # Translations
54
+ *.mo
55
+ *.pot
56
+
57
+ # Django stuff:
58
+ *.log
59
+ local_settings.py
60
+ db.sqlite3
61
+ db.sqlite3-journal
62
+
63
+ # Flask stuff:
64
+ instance/
65
+ .webassets-cache
66
+
67
+ # Scrapy stuff:
68
+ .scrapy
69
+
70
+ # Sphinx documentation
71
+ docs/_build/
72
+
73
+ # PyBuilder
74
+ .pybuilder/
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ # For a library or package, you might want to ignore these files since the code is
86
+ # intended to run in multiple environments; otherwise, check them in:
87
+ # .python-version
88
+
89
+ # pipenv
90
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
91
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
92
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
93
+ # install all needed dependencies.
94
+ #Pipfile.lock
95
+
96
+ # poetry
97
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
98
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
99
+ # commonly ignored for libraries.
100
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
101
+ #poetry.lock
102
+
103
+ # pdm
104
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
105
+ #pdm.lock
106
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
107
+ # in version control.
108
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
109
+ .pdm.toml
110
+ .pdm-python
111
+ .pdm-build/
112
+
113
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
114
+ __pypackages__/
115
+
116
+ # Celery stuff
117
+ celerybeat-schedule
118
+ celerybeat.pid
119
+
120
+ # SageMath parsed files
121
+ *.sage.py
122
+
123
+ # Environments
124
+ .env
125
+ .venv
126
+ env/
127
+ venv/
128
+ ENV/
129
+ env.bak/
130
+ venv.bak/
131
+
132
+ # Spyder project settings
133
+ .spyderproject
134
+ .spyproject
135
+
136
+ # Rope project settings
137
+ .ropeproject
138
+
139
+ # mkdocs documentation
140
+ /site
141
+
142
+ # mypy
143
+ .mypy_cache/
144
+ .dmypy.json
145
+ dmypy.json
146
+
147
+ # Pyre type checker
148
+ .pyre/
149
+
150
+ # pytype static type analyzer
151
+ .pytype/
152
+
153
+ # Cython debug symbols
154
+ cython_debug/
155
+
156
+ # PyCharm
157
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
158
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
159
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
160
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
161
+ #.idea/
162
+ /.vs
163
+ /.vs
164
+ /src/__pycache__
165
+ /utils/__pycache__
166
+ /__pycache__
167
+ /temp_models
LUT/BlackWhite.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/CineCold.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/CineDrama.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/CineVibrant.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/CineWarm.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/Depth_of_Field.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/Glow_Highlights.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/RedWhiteBlue.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/daisy.jpg ADDED

Git LFS Details

  • SHA256: 6e12bcc42db839809cd7af2ecf1036a5d2e400e741599c871acdfe2197c82636
  • Pointer size: 131 Bytes
  • Size of remote file: 164 kB
LUT/grayscale.cube ADDED
The diff for this file is too large to render. See raw diff
 
LUT/scenery01.cube ADDED
The diff for this file is too large to render. See raw diff
 
README.md CHANGED
@@ -1,14 +1,70 @@
1
  ---
2
- title: FLUX LoRA DLC
3
- emoji: 🥳
4
- colorFrom: blue
5
- colorTo: yellow
6
  sdk: gradio
7
- sdk_version: 4.44.0
8
  app_file: app.py
9
  pinned: true
10
  license: creativeml-openrail-m
11
- short_description: Flux Dev LoRA DLC
 
 
12
  ---
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Hex Game Maker
3
+ emoji: 🌖
4
+ colorFrom: yellow
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 5.16.0
8
  app_file: app.py
9
  pinned: true
10
  license: creativeml-openrail-m
11
+ short_description: '[ 250+ Impressive LoRA For Flux ]'
12
+ thumbnail: >-
13
+ https://cdn-uploads.huggingface.co/production/uploads/6346595c9e5f0fe83fc60444/9dqqr3iMjoNdXWzDTV42-.png
14
  ---
15
 
16
+ # List of Flux Dev LoRA Repositories Used as of Now
17
+
18
+ | No. | Repository Name | Link |
19
+ | --- | --------------- | ---- |
20
+ | 1 | Canopus-LoRA-Flux-FaceRealism | [Link](https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism) |
21
+ | 2 | softserve_anime | [Link](https://huggingface.co/alvdansen/softserve_anime) |
22
+ | 3 | Canopus-LoRA-Flux-Anime | [Link](https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Anime) |
23
+ | 4 | FLUX.1-dev-LoRA-One-Click-Creative-Template | [Link](https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-One-Click-Creative-Template) |
24
+ | 5 | Canopus-LoRA-Flux-UltraRealism-2.0 | [Link](https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0) |
25
+ | 6 | Flux-Game-Assets-LoRA-v2 | [Link](https://huggingface.co/gokaygokay/Flux-Game-Assets-LoRA-v2) |
26
+ | 7 | softpasty-flux-dev | [Link](https://huggingface.co/alvdansen/softpasty-flux-dev) |
27
+ | 8 | FLUX.1-dev-LoRA-add-details | [Link](https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-add-details) |
28
+ | 9 | frosting_lane_flux | [Link](https://huggingface.co/alvdansen/frosting_lane_flux) |
29
+ | 10 | flux-ghibsky-illustration | [Link](https://huggingface.co/aleksa-codes/flux-ghibsky-illustration) |
30
+ | 11 | FLUX.1-dev-LoRA-Dark-Fantasy | [Link](https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Dark-Fantasy) |
31
+ | 12 | Flux_1_Dev_LoRA_Paper-Cutout-Style | [Link](https://huggingface.co/Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style) |
32
+ | 13 | mooniverse | [Link](https://huggingface.co/alvdansen/mooniverse) |
33
+ | 14 | pola-photo-flux | [Link](https://huggingface.co/alvdansen/pola-photo-flux) |
34
+ | 15 | flux-tarot-v1 | [Link](https://huggingface.co/multimodalart/flux-tarot-v1) |
35
+ | 16 | Flux-Dev-Real-Anime-LoRA | [Link](https://huggingface.co/prithivMLmods/Flux-Dev-Real-Anime-LoRA) |
36
+ | 17 | Flux_Sticker_Lora | [Link](https://huggingface.co/diabolic6045/Flux_Sticker_Lora) |
37
+ | 18 | flux-RealismLora | [Link](https://huggingface.co/XLabs-AI/flux-RealismLora) |
38
+ | 19 | flux-koda | [Link](https://huggingface.co/alvdansen/flux-koda) |
39
+ | 20 | Cine-Aesthetic | [Link](https://huggingface.co/mgwr/Cine-Aesthetic) |
40
+ | 21 | flux_cute3D | [Link](https://huggingface.co/SebastianBodza/flux_cute3D) |
41
+ | 22 | flux_dreamscape | [Link](https://huggingface.co/bingbangboom/flux_dreamscape) |
42
+ | 23 | Canopus-Cute-Kawaii-Flux-LoRA | [Link](https://huggingface.co/prithivMLmods/Canopus-Cute-Kawaii-Flux-LoRA) |
43
+ | 24 | Flux-Pastel-Anime | [Link](https://huggingface.co/Raelina/Flux-Pastel-Anime) |
44
+ | 25 | FLUX.1-dev-LoRA-Vector-Journey | [Link](https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Vector-Journey) |
45
+ | 26 | flux-miniature-worlds | [Link](https://huggingface.co/bingbangboom/flux-miniature-worlds) |
46
+ | 27 | bingbangboom_flux_surf | [Link](https://huggingface.co/glif-loradex-trainer/bingbangboom_flux_surf) |
47
+ | 28 | Canopus-Snoopy-Charlie-Brown-Flux-LoRA | [Link](https://huggingface.co/prithivMLmods/Canopus-Snoopy-Charlie-Brown-Flux-LoRA) |
48
+ | 29 | sonny-anime-fixed | [Link](https://huggingface.co/alvdansen/sonny-anime-fixed) |
49
+ | 30 | flux-multi-angle | [Link](https://huggingface.co/davisbro/flux-multi-angle) |
50
+
51
+ & More ...
52
+
53
+ # Space Inspired From
54
+
55
+ | No. | Feature/Component | Description |
56
+ | --- | ----------------- | ----------- |
57
+ | 1 | **Title** | Flux LoRA The Explorer |
58
+ | 2 | **Model** | LoRA Fine-tuning with the Flux Model |
59
+ | 3 | **Exploration Mode** | Explore fine-tuned models within the Flux framework |
60
+ | 4 | **Interactivity** | Allows users to experiment with different LoRA models |
61
+ | 5 | **UI** | Clean interface inspired by multimodal designs |
62
+ | 6 | **Main Functionality** | Generate images using custom-trained LoRA models in Flux |
63
+ | 7 | **Usage Options** | Various models for selection and generation within the app |
64
+ | 8 | **Integration** | Hugging Face integration for easy access to pre-trained models |
65
+ | 9 | **Examples** | Provides image samples for user inspiration |
66
+ | 10 | **Customization** | User can modify prompts and parameters to explore model creativity |
67
+ | 11 | **Space URL** | [flux-lora-the-explorer](https://huggingface.co/spaces/multimodalart/flux-lora-the-explorer) |
68
+
69
+
70
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py CHANGED
@@ -11,6 +11,7 @@ import torch
11
  from PIL import Image
12
  import gradio as gr
13
 
 
14
  from diffusers import (
15
  DiffusionPipeline,
16
  AutoencoderTiny,
@@ -25,8 +26,26 @@ from huggingface_hub import (
25
  ModelCard,
26
  snapshot_download)
27
 
 
 
 
 
 
 
 
 
 
28
  import spaces
29
 
 
 
 
 
 
 
 
 
 
30
  def calculate_shift(
31
  image_seq_len,
32
  base_seq_len: int = 256,
@@ -181,8 +200,155 @@ def flux_pipe_call_that_returns_an_iterable_of_images(
181
  torch.cuda.empty_cache()
182
  yield self.image_processor.postprocess(image, output_type=output_type)[0]
183
 
184
- #-----------------------------------------------------------------------------------LoRA's--------------------------------------------------------------------------#
185
  loras = [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  #1
187
  {
188
  "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism/resolve/main/images/11.png",
@@ -199,10 +365,10 @@ loras = [
199
  },
200
  #3
201
  {
202
- "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Anime/resolve/main/assets/4.png",
203
- "title": "Flux Anime",
204
- "repo": "prithivMLmods/Canopus-LoRA-Flux-Anime",
205
- "trigger_word": "Anime"
206
  },
207
  #4
208
  {
@@ -213,7 +379,7 @@ loras = [
213
  },
214
  #5
215
  {
216
- "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0/resolve/main/images/3.png",
217
  "title": "Ultra Realism",
218
  "repo": "prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0",
219
  "trigger_word": "Ultra realistic"
@@ -241,10 +407,10 @@ loras = [
241
  },
242
  #9
243
  {
244
- "image": "https://huggingface.co/alvdansen/frosting_lane_flux/resolve/main/images/content%20-%202024-08-11T010011.238.jpeg",
245
- "title": "Frosting Lane",
246
- "repo": "alvdansen/frosting_lane_flux",
247
- "trigger_word": "frstingln illustration"
248
  },
249
  #10
250
  {
@@ -339,7 +505,7 @@ loras = [
339
  },
340
  #23
341
  {
342
- "image": "https://huggingface.co/prithivMLmods/Canopus-Cute-Kawaii-Flux-LoRA/resolve/main/images/11.png",
343
  "title": "Cute Kawaii",
344
  "repo": "prithivMLmods/Canopus-Cute-Kawaii-Flux-LoRA",
345
  "trigger_word": "cute-kawaii"
@@ -363,6 +529,7 @@ loras = [
363
  "image": "https://huggingface.co/bingbangboom/flux-miniature-worlds/resolve/main/images/2.jpg",
364
  "title": "Miniature",
365
  "repo": "bingbangboom/flux-miniature-worlds",
 
366
  "trigger_word": "Image in the style of MNTRWRLDS"
367
  },
368
  #27
@@ -370,6 +537,7 @@ loras = [
370
  "image": "https://huggingface.co/glif-loradex-trainer/bingbangboom_flux_surf/resolve/main/samples/1729012111574__000002000_0.jpg",
371
  "title": "Surf Bingbangboom",
372
  "repo": "glif-loradex-trainer/bingbangboom_flux_surf",
 
373
  "trigger_word": "SRFNGV01"
374
  },
375
  #28
@@ -391,9 +559,1530 @@ loras = [
391
  "image": "https://huggingface.co/davisbro/flux-multi-angle/resolve/main/multi-angle-examples/3.png",
392
  "title": "Multi Angle",
393
  "repo": "davisbro/flux-multi-angle",
394
- "trigger_word": "in the style of TOK"
395
- }
396
- #add--new LoRA Below ↓ - Before that Use(,)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
397
  ]
398
 
399
  #--------------------------------------------------Model Initialization-----------------------------------------------------------------------------------------#
@@ -459,7 +2148,7 @@ def update_selection(evt: gr.SelectData, width, height):
459
  height,
460
  )
461
 
462
- @spaces.GPU(duration=70)
463
  def generate_image(prompt_mash, steps, seed, cfg_scale, width, height, lora_scale, progress):
464
  pipe.to("cuda")
465
  generator = torch.Generator(device="cuda").manual_seed(seed)
@@ -496,10 +2185,10 @@ def generate_image_to_image(prompt_mash, image_input_path, image_strength, steps
496
  ).images[0]
497
  return final_image
498
 
499
- @spaces.GPU(duration=70)
500
  def run_lora(prompt, image_input, image_strength, cfg_scale, steps, selected_index, randomize_seed, seed, width, height, lora_scale, progress=gr.Progress(track_tqdm=True)):
501
  if selected_index is None:
502
- raise gr.Error("You must select a LoRA before proceeding.")
503
  selected_lora = loras[selected_index]
504
  lora_path = selected_lora["repo"]
505
  trigger_word = selected_lora["trigger_word"]
@@ -557,8 +2246,10 @@ def get_huggingface_safetensors(link):
557
  base_model = model_card.data.get("base_model")
558
  print(base_model)
559
 
 
560
  if((base_model != "black-forest-labs/FLUX.1-dev") and (base_model != "black-forest-labs/FLUX.1-schnell")):
561
  raise Exception("Flux LoRA Not Found!")
 
562
  # Only allow "black-forest-labs/FLUX.1-dev"
563
  #if base_model != "black-forest-labs/FLUX.1-dev":
564
  #raise Exception("Only FLUX.1-dev is supported, other LoRA models are not allowed!")
@@ -632,32 +2323,16 @@ def remove_custom_lora():
632
 
633
  run_lora.zerogpu = True
634
 
635
- css = '''
636
- #gen_btn{height: 100%}
637
- #gen_column{align-self: stretch}
638
- #title{text-align: center}
639
- #title h1{font-size: 3em; display:inline-flex; align-items:center}
640
- #title img{width: 100px; margin-right: 0.5em}
641
- #gallery .grid-wrap{height: 10vh}
642
- #lora_list{background: var(--block-background-fill);padding: 0 1em .3em; font-size: 90%}
643
- .card_internal{display: flex;height: 100px;margin-top: .5em}
644
- .card_internal img{margin-right: 1em}
645
- .styler{--form-gap-width: 0px !important}
646
- #progress{height:30px}
647
- #progress .generating{display:none}
648
- .progress-container {width: 100%;height: 30px;background-color: #f0f0f0;border-radius: 15px;overflow: hidden;margin-bottom: 20px}
649
- .progress-bar {height: 100%;background-color: #4f46e5;width: calc(var(--current) / var(--total) * 100%);transition: width 0.5s ease-in-out}
650
- '''
651
-
652
- with gr.Blocks(theme="prithivMLmods/Minecraft-Theme", css=css, delete_cache=(60, 3600)) as app:
653
  title = gr.HTML(
654
- """<h1>FLUX LoRA DLC🥳</h1>""",
655
  elem_id="title",
656
  )
657
  selected_index = gr.State(None)
658
  with gr.Row():
659
  with gr.Column(scale=3):
660
- prompt = gr.Textbox(label="Prompt", lines=1, placeholder="Choose the LoRA and type the prompt")
661
  with gr.Column(scale=1, elem_id="gen_column"):
662
  generate_button = gr.Button("Generate", variant="primary", elem_id="gen_btn")
663
  with gr.Row():
@@ -698,6 +2373,8 @@ with gr.Blocks(theme="prithivMLmods/Minecraft-Theme", css=css, delete_cache=(60,
698
  randomize_seed = gr.Checkbox(True, label="Randomize seed")
699
  seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, randomize=True)
700
  lora_scale = gr.Slider(label="LoRA Scale", minimum=0, maximum=3, step=0.01, value=0.95)
 
 
701
 
702
  gallery.select(
703
  update_selection,
@@ -721,4 +2398,4 @@ with gr.Blocks(theme="prithivMLmods/Minecraft-Theme", css=css, delete_cache=(60,
721
  )
722
 
723
  app.queue()
724
- app.launch()
 
11
  from PIL import Image
12
  import gradio as gr
13
 
14
+
15
  from diffusers import (
16
  DiffusionPipeline,
17
  AutoencoderTiny,
 
26
  ModelCard,
27
  snapshot_download)
28
 
29
+ from diffusers.utils import load_image
30
+
31
+ from modules.version_info import (
32
+ versions_html,
33
+ #initialize_cuda,
34
+ #release_torch_resources,
35
+ #get_torch_info
36
+ )
37
+
38
  import spaces
39
 
40
+ #---if workspace = local or colab---
41
+
42
+ # Authenticate with Hugging Face
43
+ # from huggingface_hub import login
44
+
45
+ # Log in to Hugging Face using the provided token
46
+ # hf_token = 'hf-token-authentication'
47
+ # login(hf_token)
48
+
49
  def calculate_shift(
50
  image_seq_len,
51
  base_seq_len: int = 256,
 
200
  torch.cuda.empty_cache()
201
  yield self.image_processor.postprocess(image, output_type=output_type)[0]
202
 
203
+ #------------------------------------------------------------------------------------------------------------------------------------------------------------#
204
  loras = [
205
+ #Super-Realism
206
+ {
207
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Realism-LoRA/resolve/main/images/1.png",
208
+ "title": "Super Realism",
209
+ "repo": "strangerzonehf/Flux-Super-Realism-LoRA",
210
+ "weights": "super-realism.safetensors",
211
+ "trigger_word": "Super Realism"
212
+ },
213
+ #Dalle-Mix
214
+ {
215
+ "image": "https://huggingface.co/prithivMLmods/Flux-Dalle-Mix-LoRA/resolve/main/images/D3.png",
216
+ "title": "Dalle Mix",
217
+ "repo": "prithivMLmods/Flux-Dalle-Mix-LoRA",
218
+ "weights": "dalle-mix.safetensors",
219
+ "trigger_word": "dalle-mix"
220
+ },
221
+ #Datou1111/shou_xin
222
+ {
223
+ "image": "https://huggingface.co/strangerzonehf/Flux-Ultimate-LoRA-Collection/resolve/main/images/example_aqz3dv60n.jpeg",
224
+ "title": "SHOU_XIN",
225
+ "repo": "Datou1111/shou_xin",
226
+ "weights": "shou_xin.safetensors",
227
+ "trigger_word": "shou_xin, pencil sketch"
228
+ },
229
+ #smudge
230
+ {
231
+ "image": "https://huggingface.co/strangerzonehf/Flux-Sketch-Smudge-LoRA/resolve/main/images/5.png",
232
+ "title": "Sketch_Smudge",
233
+ "repo": "strangerzonehf/Flux-Sketch-Smudge-LoRA",
234
+ "weights": "Sketch-Smudge.safetensors",
235
+ "trigger_word": " Sketch Smudge"
236
+ },
237
+ #anime-v1
238
+ {
239
+ "image": "https://huggingface.co/strangerzonehf/Flux-Animeo-v1-LoRA/resolve/main/images/A4.png",
240
+ "title": "Animeo Mix",
241
+ "repo": "strangerzonehf/Flux-Animeo-v1-LoRA",
242
+ "weights": "Animeo.safetensors",
243
+ "trigger_word": "Animeo"
244
+ },
245
+ #anime-v2
246
+ {
247
+ "image": "https://huggingface.co/strangerzonehf/Flux-Animex-v2-LoRA/resolve/main/images/A33.png",
248
+ "title": "Animex Mix",
249
+ "repo": "strangerzonehf/Flux-Animex-v2-LoRA",
250
+ "weights": "Animex.safetensors",
251
+ "trigger_word": "Animex"
252
+ },
253
+ #Super Portrait
254
+ {
255
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Portrait-LoRA/resolve/main/images/3.png",
256
+ "title": "Super Portraits",
257
+ "repo": "strangerzonehf/Flux-Super-Portrait-LoRA",
258
+ "weights": "Super-Portrait.safetensors",
259
+ "trigger_word": "Super Portrait"
260
+ },
261
+ #Super-Blend
262
+ {
263
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Blend-LoRA/resolve/main/images/SB1.png",
264
+ "title": "Super Blend",
265
+ "repo": "strangerzonehf/Flux-Super-Blend-LoRA",
266
+ "weights": "Super-Blend.safetensors",
267
+ "trigger_word": "Super Blend"
268
+ },
269
+ #3DXL P@1
270
+ {
271
+ "image": "https://huggingface.co/strangerzonehf/Flux-3DXL-Partfile-0001/resolve/main/images/4.png",
272
+ "title": "3DXLP1",
273
+ "repo": "strangerzonehf/Flux-3DXL-Partfile-0001",
274
+ "weights": "3DXLP1.safetensors",
275
+ "trigger_word": "3DXLP1"
276
+ },
277
+ #Mixer2.0
278
+ {
279
+ "image": "https://huggingface.co/strangerzonehf/Flux-Midjourney-Mix2-LoRA/resolve/main/images/3.png",
280
+ "title": "Midjourney Mix 2",
281
+ "repo": "strangerzonehf/Flux-Midjourney-Mix2-LoRA",
282
+ "weights": "mjV6.safetensors",
283
+ "trigger_word": "MJ v6"
284
+ },
285
+ {
286
+ "image": "https://huggingface.co/prithivMLmods/Flux-Long-Toon-LoRA/resolve/main/images/LT5.png",
287
+ "title": "Long Toons",
288
+ "repo": "prithivMLmods/Flux-Long-Toon-LoRA",
289
+ "weights": "Long-Toon.safetensors",
290
+ "trigger_word": "Long toons"
291
+ },
292
+ {
293
+ "image": "https://huggingface.co/strangerzonehf/Flux-Cute-3D-Kawaii-LoRA/resolve/main/images/CK3.png",
294
+ "title": "Cute 3D Kawaii",
295
+ "repo": "strangerzonehf/Flux-Cute-3D-Kawaii-LoRA",
296
+ "weights": "Cute-3d-Kawaii.safetensors",
297
+ "trigger_word": "Cute 3d Kawaii"
298
+ },
299
+
300
+ {
301
+ "image": "https://huggingface.co/strangerzonehf/Flux-Isometric-3D-LoRA/resolve/main/images/ID2.png",
302
+ "title": "Isometric 3D",
303
+ "repo": "strangerzonehf/Flux-Isometric-3D-LoRA",
304
+ "weights": "Isometric-3D.safetensors",
305
+ "trigger_word": "Isometric 3D"
306
+ },
307
+ {
308
+ "image": "https://huggingface.co/prithivMLmods/Flux-Toonic-2.5D-LoRA/resolve/main/images/T2.png",
309
+ "title": "Toon 2.5D",
310
+ "repo": "prithivMLmods/Flux-Toonic-2.5D-LoRA",
311
+ "weights": "toonic2.5D.safetensors",
312
+ "trigger_word": "toonic 2.5D"
313
+ },
314
+ {
315
+ "image": "https://huggingface.co/strangerzonehf/Flux-YWL-Realism-LoRA/resolve/main/images/R3.png",
316
+ "title": "YWL Realism",
317
+ "repo": "strangerzonehf/Flux-YWL-Realism-LoRA",
318
+ "weights": "ywl-realism.safetensors",
319
+ "trigger_word": "ylw realism"
320
+ },
321
+ #chill-guy
322
+ {
323
+ "image": "https://huggingface.co/prithivMLmods/Flux-Chill-Guy-Zone/resolve/main/images/8.png",
324
+ "title": "Chill Guy",
325
+ "repo": "prithivMLmods/Flux-Chill-Guy-Zone",
326
+ "weights": "chill-guy.safetensors",
327
+ "trigger_word": "chill guy"
328
+ },
329
+ {
330
+ "image": "https://huggingface.co/p1atdev/flux.1-schnell-pvc-style-lora/resolve/main/images/flux_lora_00221_.png",
331
+ "title": "Anime PVC Style",
332
+ "repo": "p1atdev/flux.1-schnell-pvc-style-lora",
333
+ "weights": "pvc-shnell-7250+7500.safetensors",
334
+ "trigger_word": "pvc figure, nendoroid, figma"
335
+ },
336
+ {
337
+ "image": "https://huggingface.co/strangerzonehf/Flux-C4C-Design-LoRA/resolve/main/images/4.png",
338
+ "title": "Smiley C4C",
339
+ "repo": "strangerzonehf/Flux-C4C-Design-LoRA",
340
+ "weights": "Smiley-C4C.safetensors",
341
+ "trigger_word": "Smiley C4C"
342
+ },
343
+ #-----------------------------------------------------------------------------------LoRA's----------------------------------------------------------------------#
344
+ #0
345
+ {
346
+ "image": "https://huggingface.co/prithivMLmods/Purple-Dreamy-Flux-LoRA/resolve/main/images/PD3.png",
347
+ "title": "Purple Dream",
348
+ "repo": "prithivMLmods/Purple-Dreamy-Flux-LoRA",
349
+ "weights": "Purple-Dreamy.safetensors",
350
+ "trigger_word": "Purple Dreamy"
351
+ },
352
  #1
353
  {
354
  "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism/resolve/main/images/11.png",
 
365
  },
366
  #3
367
  {
368
+ "image": "https://huggingface.co/prithivMLmods/Fashion-Hut-Modeling-LoRA/resolve/main/images/MO1.png",
369
+ "title": "Modeling Hut",
370
+ "repo": "prithivMLmods/Fashion-Hut-Modeling-LoRA",
371
+ "trigger_word": "Modeling of"
372
  },
373
  #4
374
  {
 
379
  },
380
  #5
381
  {
382
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0/resolve/main/images/XX.png",
383
  "title": "Ultra Realism",
384
  "repo": "prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0",
385
  "trigger_word": "Ultra realistic"
 
407
  },
408
  #9
409
  {
410
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Anime/resolve/main/assets/4.png",
411
+ "title": "Flux Anime",
412
+ "repo": "prithivMLmods/Canopus-LoRA-Flux-Anime",
413
+ "trigger_word": "Anime"
414
  },
415
  #10
416
  {
 
505
  },
506
  #23
507
  {
508
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism/resolve/main/images/xc.webp",
509
  "title": "Cute Kawaii",
510
  "repo": "prithivMLmods/Canopus-Cute-Kawaii-Flux-LoRA",
511
  "trigger_word": "cute-kawaii"
 
529
  "image": "https://huggingface.co/bingbangboom/flux-miniature-worlds/resolve/main/images/2.jpg",
530
  "title": "Miniature",
531
  "repo": "bingbangboom/flux-miniature-worlds",
532
+ "weights": "flux_MNTRWRLDS.safetensors",
533
  "trigger_word": "Image in the style of MNTRWRLDS"
534
  },
535
  #27
 
537
  "image": "https://huggingface.co/glif-loradex-trainer/bingbangboom_flux_surf/resolve/main/samples/1729012111574__000002000_0.jpg",
538
  "title": "Surf Bingbangboom",
539
  "repo": "glif-loradex-trainer/bingbangboom_flux_surf",
540
+ "weights": "flux_surf.safetensors",
541
  "trigger_word": "SRFNGV01"
542
  },
543
  #28
 
559
  "image": "https://huggingface.co/davisbro/flux-multi-angle/resolve/main/multi-angle-examples/3.png",
560
  "title": "Multi Angle",
561
  "repo": "davisbro/flux-multi-angle",
562
+ "trigger_word": "A TOK composite photo of a person posing at different angles"
563
+ },
564
+ #31
565
+ {
566
+ "image": "https://huggingface.co/glif/how2draw/resolve/main/images/glif-how2draw-araminta-k-vbnvy94npt8m338r2vm02m50.jpg",
567
+ "title": "How2Draw",
568
+ "repo": "glif/how2draw",
569
+ "trigger_word": "How2Draw"
570
+
571
+ },
572
+ #32
573
+ {
574
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster/resolve/main/images/6dd1a918d89991ad5e40513ab88e7d892077f89dac93edcf4b660dd2.jpg",
575
+ "title": "Text Poster",
576
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster",
577
+ "trigger_word": "text poster"
578
+ },
579
+ #33
580
+ {
581
+ "image": "https://huggingface.co/SebastianBodza/Flux_Aquarell_Watercolor_v2/resolve/main/images/coffee.webp",
582
+ "title": "Aquarell Watercolor",
583
+ "repo": "SebastianBodza/Flux_Aquarell_Watercolor_v2",
584
+ "trigger_word": "AQUACOLTOK"
585
+ },
586
+ #34
587
+ {
588
+ "image": "https://huggingface.co/Purz/face-projection/resolve/main/34031797.jpeg",
589
+ "title": "Face Projection ",
590
+ "repo": "Purz/face-projection",
591
+ "trigger_word": "f4c3_p40j3ct10n"
592
+ },
593
+ #35
594
+ {
595
+ "image": "https://huggingface.co/martintomov/ecom-flux-v2/resolve/main/images/example_z30slf97z.png",
596
+ "title": "Ecom Design Art",
597
+ "repo": "martintomov/ecom-flux-v2",
598
+ "trigger_word": ""
599
+ },
600
+ #36
601
+ {
602
+ "image": "https://huggingface.co/TheAwakenOne/max-headroom/resolve/main/sample/max-headroom_000900_00_20241015234926.png",
603
+ "title": "Max Head-Room",
604
+ "repo": "TheAwakenOne/max-headroom",
605
+ "weights": "max-headroom-v1.safetensors",
606
+ "trigger_word": "M2X, Max-Headroom"
607
+ },
608
+ #37
609
+ {
610
+ "image": "https://huggingface.co/renderartist/toyboxflux/resolve/main/images/3D__00366_.png",
611
+ "title": "Toy Box Flux",
612
+ "repo": "renderartist/toyboxflux",
613
+ "weights": "Toy_Box_Flux_v2_renderartist.safetensors",
614
+ "trigger_word": "t0yb0x, simple toy design, detailed toy design, 3D render"
615
+ },
616
+ #38
617
+ {
618
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-live-3D/resolve/main/images/51a716fb6fe9ba5d54c260b70e7ff661d38acedc7fb725552fa77bcf.jpg",
619
+ "title": "Live 3D",
620
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-live-3D",
621
+ "trigger_word": ""
622
+ },
623
+ #39
624
+ {
625
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Garbage-Bag-Art/resolve/main/images/42e944819b43869a03dc252d10409b5944a62494c7082816121016f9.jpg",
626
+ "title": "Garbage Bag Art",
627
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Garbage-Bag-Art",
628
+ "trigger_word": "Inflatable plastic bag"
629
+ },
630
+ #40
631
+ {
632
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design/resolve/main/images/73e7db6a33550d05836ce285549de60075d05373c7b0660d631dac33.jpg",
633
+ "title": "Logo Design",
634
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design",
635
+ "trigger_word": "wablogo, logo, Minimalist"
636
+ },
637
+ #41
638
+ {
639
+ "image": "https://huggingface.co/punzel/flux_sadie_sink/resolve/main/images/ComfyUI_Flux_Finetune_00069_.png",
640
+ "title": "Sadie Sink",
641
+ "repo": "punzel/flux_sadie_sink",
642
+ "weights": "flux_sadie_sink.safetensors",
643
+ "trigger_word": "Sadie Sink"
644
+ },
645
+ #43
646
+ {
647
+ "image": "https://huggingface.co/Wakkamaruh/balatro-poker-cards/resolve/main/samples/01.png",
648
+ "title": "Poker Cards",
649
+ "repo": "Wakkamaruh/balatro-poker-cards",
650
+ "weights": "balatro-poker-cards.safetensors",
651
+ "trigger_word": "balatrocard"
652
+ },
653
+ #44
654
+ {
655
+ "image": "https://huggingface.co/lichorosario/flux-cubist-cartoon/resolve/main/samples/albert-einstein.png",
656
+ "title": "Cubist Cartoon",
657
+ "repo": "lichorosario/flux-cubist-cartoon",
658
+ "weights": "lora.safetensors",
659
+ "trigger_word": "CBSTCRTN"
660
+ },
661
+ #45
662
+ {
663
+ "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",
664
+ "title": "Miniature People",
665
+ "repo": "iliketoasters/miniature-people",
666
+ "trigger_word": "miniature people"
667
+ },
668
+ #46
669
+ {
670
+ "image": "https://huggingface.co/ampp/rough-kids-illustrations/resolve/main/samples/1725115106736__000001000_0.jpg",
671
+ "title": "kids Illustrations",
672
+ "repo": "ampp/rough-kids-illustrations",
673
+ "weights": "rough-kids-illustrations.safetensors",
674
+ "trigger_word": "r0ughkids4rt"
675
+ },
676
+ #47
677
+ {
678
+ "image": "https://huggingface.co/lichorosario/flux-lora-tstvctr/resolve/main/images/example_mo3jx93o6.png",
679
+ "title": "TSTVCTR Cartoon",
680
+ "repo": "lichorosario/flux-lora-tstvctr",
681
+ "weights": "lora.safetensors",
682
+ "trigger_word": "TSTVCTR cartoon illustration"
683
+ },
684
+ #48
685
+ {
686
+ "image": "https://huggingface.co/lichorosario/flux-lora-gliff-tosti-vector-no-captions-2500s/resolve/main/images/example_i6h6fi9sq.png",
687
+ "title": "Tosti Vector",
688
+ "repo": "lichorosario/flux-lora-gliff-tosti-vector-no-captions-2500s",
689
+ "weights": "flux_dev_tosti_vector_without_captions_000002500.safetensors",
690
+ "trigger_word": ""
691
+ },
692
+ #49
693
+ {
694
+ "image": "https://huggingface.co/AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion/resolve/main/Trashy.png",
695
+ "title": "Propaganda Poster",
696
+ "repo": "AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion",
697
+ "weights": "propaganda_schnell_v1.safetensors",
698
+ "trigger_word": "propaganda poster"
699
+ },
700
+ #50
701
+ {
702
+ "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",
703
+ "title": "Ringside Portrait",
704
+ "repo": "WizWhite/Wiz-PunchOut_Ringside_Portrait",
705
+ "trigger_word": "punch0ut, ringside pixel portrait depicting"
706
+ },
707
+ #51
708
+ {
709
+ "image": "https://huggingface.co/glif-loradex-trainer/kklors_flux_dev_long_exposure/resolve/main/samples/1729016926778__000003000_3.jpg",
710
+ "title": "Long Exposure",
711
+ "repo": "glif-loradex-trainer/kklors_flux_dev_long_exposure",
712
+ "weights": "flux_dev_long_exposure.safetensors",
713
+ "trigger_word": "LE"
714
+ },
715
+ #52
716
+ {
717
+ "image": "https://huggingface.co/DamarJati/streetwear-flux/resolve/main/img/79e891f9-ceb8-4f8a-a51d-bb432789d037.jpeg",
718
+ "title": "Street Wear",
719
+ "repo": "DamarJati/streetwear-flux",
720
+ "weights": "Streetwear.safetensors",
721
+ "trigger_word": "Handling Information Tshirt template"
722
+ },
723
+ #53
724
+ {
725
+ "image": "https://huggingface.co/strangerzonehf/Flux-NTFv4-Designs-LoRA/resolve/main/images/6.png",
726
+ "title": "NFT V4",
727
+ "repo": "strangerzonehf/Flux-NFTv4-Designs-LoRA",
728
+ "weights": "NFTv4.safetensors",
729
+ "trigger_word": "NFT V4"
730
+ },
731
+ #54
732
+ {
733
+ "image": "https://huggingface.co/multimodalart/product-design/resolve/main/images/example_vgv87rlfl.png",
734
+ "title": "Product Design",
735
+ "repo": "multimodalart/product-design",
736
+ "weights": "product-design.safetensors",
737
+ "trigger_word": "product designed by prdsgn"
738
+ },
739
+ #55
740
+ {
741
+ "image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Typography-ASCII/resolve/main/images/NNN.png",
742
+ "title": "Typography",
743
+ "repo": "prithivMLmods/Canopus-LoRA-Flux-Typography-ASCII",
744
+ "weights": "Typography.safetensors",
745
+ "trigger_word": "Typography, ASCII Art"
746
+ },
747
+ #56
748
+ {
749
+ "image": "https://huggingface.co/mateo-19182/mosoco/resolve/main/samples/1725714834007__000002000_0.jpg",
750
+ "title": "Mosoco",
751
+ "repo": "mateo-19182/mosoco",
752
+ "weights": "mosoco.safetensors",
753
+ "trigger_word": "moscos0"
754
+ },
755
+ #57
756
+ {
757
+ "image": "https://huggingface.co/jakedahn/flux-latentpop/resolve/main/images/2.webp",
758
+ "title": "Latent Pop",
759
+ "repo": "jakedahn/flux-latentpop",
760
+ "weights": "lora.safetensors",
761
+ "trigger_word": "latentpop"
762
+ },
763
+ #58
764
+ {
765
+ "image": "https://huggingface.co/glif-loradex-trainer/ddickinson_dstyl3xl/resolve/main/samples/1728556571974__000001500_2.jpg",
766
+ "title": "Dstyl3xl",
767
+ "repo": "glif-loradex-trainer/ddickinson_dstyl3xl",
768
+ "weights": "dstyl3xl.safetensors",
769
+ "trigger_word": "in the style of dstyl3xl"
770
+ },
771
+ #59
772
+ {
773
+ "image": "https://huggingface.co/TDN-M/RetouchFLux/resolve/main/images/496f0680-0158-4f37-805d-d227c1a08a7b.png",
774
+ "title": "Retouch FLux",
775
+ "repo": "TDN-M/RetouchFLux",
776
+ "weights": "TDNM_Retouch.safetensors",
777
+ "trigger_word": "luxury, enhance, hdr"
778
+ },
779
+ #60
780
+ {
781
+ "image": "https://huggingface.co/glif/anime-blockprint-style/resolve/main/images/glif-block-print-anime-flux-dev-araminta-k-lora-araminta-k-e35k8xqsrb8dtq2qcv4gsr3z.jpg",
782
+ "title": "Block Print",
783
+ "repo": "glif/anime-blockprint-style",
784
+ "weights": "bwmanga.safetensors",
785
+ "trigger_word": "blockprint style"
786
+ },
787
+ #61
788
+ {
789
+ "image": "https://huggingface.co/renderartist/weirdthingsflux/resolve/main/images/3D__02303_.png",
790
+ "title": "Weird Things Flux",
791
+ "repo": "renderartist/weirdthingsflux",
792
+ "weights": "Weird_Things_Flux_v1_renderartist.safetensors",
793
+ "trigger_word": "w3irdth1ngs, illustration"
794
+ },
795
+ #62
796
+ {
797
+ "image": "https://replicate.delivery/yhqm/z7f2OBcvga07dCoJ4FeRGZCbE5PvipLhogPhEeU7BazIg5lmA/out-0.webp",
798
+ "title": "Replicate Flux LoRA",
799
+ "repo": "lucataco/ReplicateFluxLoRA",
800
+ "weights": "flux_train_replicate.safetensors",
801
+ "trigger_word": "TOK"
802
+ },
803
+ #63
804
+ {
805
+ "image": "https://huggingface.co/alvdansen/haunted_linework_flux/resolve/main/images/ComfyUI_00755_.png",
806
+ "title": "Linework",
807
+ "repo": "alvdansen/haunted_linework_flux",
808
+ "weights": "hauntedlinework_flux_araminta_k.safetensors",
809
+ "trigger_word": "hntdlnwrk style"
810
+ },
811
+ #64
812
+ {
813
+ "image": "https://huggingface.co/fofr/flux-cassette-futurism/resolve/main/images/example_qgry9jnkj.png",
814
+ "title": "Cassette Futurism",
815
+ "repo": "fofr/flux-cassette-futurism",
816
+ "weights": "lora.safetensors",
817
+ "trigger_word": "cassette futurism"
818
+ },
819
+ #65
820
+ {
821
+ "image": "https://huggingface.co/Wadaka/Mojo_Style_LoRA/resolve/main/Samples/Sample2.png",
822
+ "title": "Mojo Style",
823
+ "repo": "Wadaka/Mojo_Style_LoRA",
824
+ "weights": "Mojo_Style_LoRA.safetensors",
825
+ "trigger_word": "Mojo_Style"
826
+
827
+ },
828
+ #66
829
+ {
830
+ "image": "https://huggingface.co/Norod78/JojosoStyle-flux-lora/resolve/main/samples/1725244218477__000004255_1.jpg",
831
+ "title": "Jojoso Style",
832
+ "repo": "Norod78/JojosoStyle-flux-lora",
833
+ "weights": "JojosoStyle_flux_lora.safetensors",
834
+ "trigger_word": "JojosoStyle"
835
+ },
836
+ #67
837
+ {
838
+ "image": "https://huggingface.co/Chunte/flux-lora-Huggieverse/resolve/main/images/Happy%20star.png",
839
+ "title": "Huggieverse",
840
+ "repo": "Chunte/flux-lora-Huggieverse",
841
+ "weights": "lora.safetensors",
842
+ "trigger_word": "HGGRE"
843
+ },
844
+ #68
845
+ {
846
+ "image": "https://huggingface.co/diabolic6045/Flux_Wallpaper_Lora/resolve/main/images/example_hjp51et93.png",
847
+ "title": "Wallpaper LoRA",
848
+ "repo": "diabolic6045/Flux_Wallpaper_Lora",
849
+ "weights": "tost-2024-09-20-07-35-44-wallpap3r5.safetensors",
850
+ "trigger_word": "wallpap3r5"
851
+ },
852
+ #69
853
+ {
854
+ "image": "https://huggingface.co/bingbangboom/flux_geopop/resolve/main/extras/5.png",
855
+ "title": "Geo Pop",
856
+ "repo": "bingbangboom/flux_geopop",
857
+ "weights": "geopop_NWGMTRCPOPV01.safetensors",
858
+ "trigger_word": "illustration in the style of NWGMTRCPOPV01"
859
+ },
860
+ #70
861
+ {
862
+ "image": "https://huggingface.co/bingbangboom/flux_colorscape/resolve/main/images/4.jpg",
863
+ "title": "Colorscape",
864
+ "repo": "bingbangboom/flux_colorscape",
865
+ "weights": "flux_colorscape.safetensors",
866
+ "trigger_word": "illustration in the style of ASstyle001"
867
+ },
868
+ #71
869
+ {
870
+ "image": "https://huggingface.co/dvyio/flux-lora-thermal-image/resolve/main/images/WROSaNNU4-Gw0r5QoBRjf_f164ffa4f0804e68bad1d06d30deecfa.jpg",
871
+ "title": "Thermal Image",
872
+ "repo": "dvyio/flux-lora-thermal-image",
873
+ "weights": "79b5004c57ef4c4390dead1c65977bbb_pytorch_lora_weights.safetensors",
874
+ "trigger_word": "thermal image in the style of THRML"
875
+ },
876
+ #72
877
+ {
878
+ "image": "https://huggingface.co/prithivMLmods/Canopus-Clothing-Flux-LoRA/resolve/main/images/333.png",
879
+ "title": "Clothing Flux",
880
+ "repo": "prithivMLmods/Canopus-Clothing-Flux-LoRA",
881
+ "weights": "Canopus-Clothing-Flux-Dev-Florence2-LoRA.safetensors",
882
+ "trigger_word": "Hoodie, Clothes, Shirt, Pant"
883
+ },
884
+ #73
885
+ {
886
+ "image": "https://huggingface.co/dvyio/flux-lora-stippled-illustration/resolve/main/images/57FPpbu74QTV45w6oNOtZ_26832270585f456c99e4a98b1c073745.jpg",
887
+ "title": "Stippled Illustration",
888
+ "repo": "dvyio/flux-lora-stippled-illustration",
889
+ "weights": "31984be602a04a1fa296d9ccb244fb29_pytorch_lora_weights.safetensors",
890
+ "trigger_word": "stippled illustration in the style of STPPLD"
891
+ },
892
+ #74
893
+ {
894
+ "image": "https://huggingface.co/wayned/fruitlabels/resolve/main/images/ComfyUI_03969_.png",
895
+ "title": "Fruitlabels",
896
+ "repo": "wayned/fruitlabels",
897
+ "weights": "fruitlabels2.safetensors",
898
+ "trigger_word": "fruit labels"
899
+
900
+ },
901
+ #76
902
+ {
903
+ "image": "https://huggingface.co/diabolic6045/Formula1_Lego_Lora/resolve/main/images/example_502kcuiba.png",
904
+ "title": "Formula 1 Lego",
905
+ "repo": "punzel/flux_margot_robbie",
906
+ "weights": "tost-2024-09-20-09-58-33-f1leg0s.safetensors",
907
+ "trigger_word": "f1leg0s"
908
+ },
909
+ #77
910
+ {
911
+ "image": "https://huggingface.co/glif/Brain-Melt-Acid-Art/resolve/main/images/IMG_0832.png",
912
+ "title": "Melt Acid",
913
+ "repo": "glif/Brain-Melt-Acid-Art",
914
+ "weights": "Brain_Melt.safetensors",
915
+ "trigger_word": "in an acid surrealism style, maximalism"
916
+ },
917
+ #78
918
+ {
919
+ "image": "https://huggingface.co/jeremytai/enso-zen/resolve/main/images/example_a0iwdj5lu.png",
920
+ "title": "Enso",
921
+ "repo": "jeremytai/enso-zen",
922
+ "weights": "enso-zen.safetensors",
923
+ "trigger_word": "enso"
924
+ },
925
+ #79
926
+ {
927
+ "image": "https://huggingface.co/veryVANYA/opus-ascii-flux/resolve/main/31654332.jpeg",
928
+ "title": "Opus Ascii",
929
+ "repo": "veryVANYA/opus-ascii-flux",
930
+ "weights": "flux_opus_ascii.safetensors",
931
+ "trigger_word": "opus_ascii"
932
+ },
933
+ #80
934
+ {
935
+ "image": "https://huggingface.co/crystantine/cybrpnkz/resolve/main/images/example_plyxk0lej.png",
936
+ "title": "Cybrpnkz",
937
+ "repo": "crystantine/cybrpnkz",
938
+ "weights": "cybrpnkz.safetensors",
939
+ "trigger_word": "architecture style of CYBRPNKZ"
940
+ },
941
+ #81
942
+ {
943
+ "image": "https://huggingface.co/fyp1/pattern_generation/resolve/main/images/1727560066052__000001000_7.jpg",
944
+ "title": "Pattern Generation",
945
+ "repo": "fyp1/pattern_generation",
946
+ "weights": "flux_dev_finetune.safetensors",
947
+ "trigger_word": "pattern"
948
+ },
949
+ #82
950
+ {
951
+ "image": "https://huggingface.co/TheAwakenOne/caricature/resolve/main/sample/caricature_000900_03_20241007143412.png",
952
+ "title": "Caricature",
953
+ "repo": "TheAwakenOne/caricature",
954
+ "weights": "caricature.safetensors",
955
+ "trigger_word": "CCTUR3"
956
+ },
957
+ #83
958
+ {
959
+ "image": "https://huggingface.co/strangerzonehf/Flux-3DXL-Partfile-C0001/resolve/main/images/C3.png",
960
+ "title": "3DXLC1",
961
+ "repo": "strangerzonehf/Flux-3DXL-Partfile-C0001",
962
+ "weights": "3DXLC1.safetensors",
963
+ "trigger_word": "3DXLC1"
964
+ },
965
+ #84
966
+ {
967
+ "image": "https://huggingface.co/Purz/neon-sign/resolve/main/33944768.jpeg",
968
+ "title": "Neon",
969
+ "repo": "Purz/neon-sign",
970
+ "weights": "purz-n30n_51gn.safetensors",
971
+ "trigger_word": "n30n_51gn"
972
+ },
973
+ #85
974
+ {
975
+ "image": "https://huggingface.co/WizWhite/wizard-s-vintage-sardine-tins/resolve/main/27597694.jpeg",
976
+ "title": "Vintage Sardine Tins",
977
+ "repo": "WizWhite/wizard-s-vintage-sardine-tins",
978
+ "weights": "Wiz-SardineTins_Flux.safetensors",
979
+ "trigger_word": "Vintage Sardine Tin, Tinned Fish, vintage xyz tin"
980
+ },
981
+ #86
982
+ {
983
+ "image": "https://huggingface.co/TheAwakenOne/mtdp-balloon-character/resolve/main/sample/mtdp-balloon-character_000200_01_20241014221110.png",
984
+ "title": "Float Ballon Character",
985
+ "repo": "TheAwakenOne/mtdp-balloon-character",
986
+ "weights": "mtdp-balloon-character.safetensors",
987
+ "trigger_word": "FLOAT"
988
+ },
989
+ #87
990
+ {
991
+ "image": "https://huggingface.co/glif/golden-haggadah/resolve/main/images/6aca6403-ecd6-4216-a66a-490ae25ff1b2.jpg",
992
+ "title": "Golden Haggadah",
993
+ "repo": "glif/golden-haggadah",
994
+ "weights": "golden_haggadah.safetensors",
995
+ "trigger_word": "golden haggadah style"
996
+ },
997
+ #88
998
+ {
999
+ "image": "https://huggingface.co/glif-loradex-trainer/usernametaken420__oz_ftw_balaclava/resolve/main/samples/1729278631255__000001500_1.jpg",
1000
+ "title": "Ftw Balaclava",
1001
+ "repo": "glif-loradex-trainer/usernametaken420__oz_ftw_balaclava",
1002
+ "weights": "oz_ftw_balaclava.safetensors",
1003
+ "trigger_word": "ftw balaclava"
1004
+ },
1005
+ #89
1006
+ {
1007
+ "image": "https://huggingface.co/AlloReview/flux-lora-undraw/resolve/main/images/Flux%20Lora%20Undraw%20Prediction.webp",
1008
+ "title": "Undraw",
1009
+ "repo": "AlloReview/flux-lora-undraw",
1010
+ "weights": "lora.safetensors",
1011
+ "trigger_word": "in the style of UndrawPurple"
1012
+ },
1013
+ #90
1014
+ {
1015
+ "image": "https://huggingface.co/Disra/lora-anime-test-02/resolve/main/assets/image_0_0.png",
1016
+ "title": "Anime Test",
1017
+ "repo": "Disra/lora-anime-test-02",
1018
+ "weights": "pytorch_lora_weights.safetensors",
1019
+ "trigger_word": "anime"
1020
+ },
1021
+ #91
1022
+ {
1023
+ "image": "https://huggingface.co/wanghaofan/Black-Myth-Wukong-FLUX-LoRA/resolve/main/images/7d0ac495a4d5e4a3a30df25f08379a3f956ef99e1dc3e252fc1fca3a.jpg",
1024
+ "title": "Black Myth Wukong",
1025
+ "repo": "wanghaofan/Black-Myth-Wukong-FLUX-LoRA",
1026
+ "weights": "pytorch_lora_weights.safetensors",
1027
+ "trigger_word": "wukong"
1028
+ },
1029
+ #92
1030
+ {
1031
+ "image": "https://huggingface.co/nerijs/pastelcomic-flux/resolve/main/images/4uZ_vaYg-HQnfa5D9gfli_38bf3f95d8b345e5a9bd42d978a15267.png",
1032
+ "title": "Pastelcomic",
1033
+ "repo": "nerijs/pastelcomic-flux",
1034
+ "weights": "pastelcomic_v1.safetensors",
1035
+ "trigger_word": ""
1036
+ },
1037
+ #93
1038
+ {
1039
+ "image": "https://huggingface.co/RareConcepts/Flux.1-dev-LoKr-Moonman/resolve/main/assets/image_6_0.png",
1040
+ "title": "Moonman",
1041
+ "repo": "RareConcepts/Flux.1-dev-LoKr-Moonman",
1042
+ "weights": "pytorch_lora_weights.safetensors",
1043
+ "trigger_word": "moonman"
1044
+ },
1045
+ #94
1046
+ {
1047
+ "image": "https://huggingface.co/martintomov/ascii-flux-v1/resolve/main/images/0af53645-ddcc-4803-93c8-f7e43f6fbbd1.jpeg",
1048
+ "title": "Ascii Flux",
1049
+ "repo": "martintomov/ascii-flux-v1",
1050
+ "weights": "ascii-art-v1.safetensors",
1051
+ "trigger_word": "ASCII art"
1052
+ },
1053
+ #95
1054
+ {
1055
+ "image": "https://huggingface.co/Omarito2412/Stars-Galaxy-Flux/resolve/main/images/25128409.jpeg",
1056
+ "title": "Ascii Flux",
1057
+ "repo": "Omarito2412/Stars-Galaxy-Flux",
1058
+ "weights": "Stars_Galaxy_Flux.safetensors",
1059
+ "trigger_word": "mlkwglx"
1060
+ },
1061
+ #96
1062
+ {
1063
+ "image": "https://huggingface.co/brushpenbob/flux-pencil-v2/resolve/main/26193927.jpeg",
1064
+ "title": "Pencil V2",
1065
+ "repo": "brushpenbob/flux-pencil-v2",
1066
+ "weights": "Flux_Pencil_v2_r1.safetensors",
1067
+ "trigger_word": "evang style"
1068
+ },
1069
+ #97
1070
+ {
1071
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Children-Simple-Sketch/resolve/main/images/1f20519208cef367af2fda8d91ddbba674f39b097389d12ee25b4cb1.jpg",
1072
+ "title": "Children Simple Sketch",
1073
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Children-Simple-Sketch",
1074
+ "weights": "FLUX-dev-lora-children-simple-sketch.safetensors",
1075
+ "trigger_word": "sketched style"
1076
+ },
1077
+ #98
1078
+ {
1079
+ "image": "https://huggingface.co/victor/contemporarink/resolve/main/images/example_hnqc22urm.png",
1080
+ "title": "Contemporarink",
1081
+ "repo": "victor/contemporarink",
1082
+ "weights": "inky-colors.safetensors",
1083
+ "trigger_word": "ECACX"
1084
+ },
1085
+ #99
1086
+ {
1087
+ "image": "https://huggingface.co/wavymulder/OverlordStyleFLUX/resolve/main/imgs/ComfyUI_00668_.png",
1088
+ "title": "OverlordStyle",
1089
+ "repo": "wavymulder/OverlordStyleFLUX",
1090
+ "weights": "ovld_style_overlord_wavymulder.safetensors",
1091
+ "trigger_word": "ovld style anime"
1092
+ },
1093
+ #100
1094
+ {
1095
+ "image": "https://huggingface.co/marceloxp/canny-quest/resolve/main/26676266.jpeg",
1096
+ "title": "Canny quest",
1097
+ "repo": "marceloxp/canny-quest",
1098
+ "weights": "Canny_Quest-000004.safetensors",
1099
+ "trigger_word": "blonde, silver silk dress, perfectly round sunglasses, pearl necklace"
1100
+ },
1101
+ #101
1102
+ {
1103
+ "image": "https://huggingface.co/busetolunay/building_flux_lora_v1/resolve/main/samples/1725469125185__000001250_2.jpg",
1104
+ "title": "Building Flux",
1105
+ "repo": "busetolunay/building_flux_lora_v1",
1106
+ "weights": "building_flux_lora_v4.safetensors",
1107
+ "trigger_word": "a0ce"
1108
+ },
1109
+ #102
1110
+ {
1111
+ "image": "https://huggingface.co/Omarito2412/Tinker-Bell-Flux/resolve/main/images/9e9e7eda-3ddf-467a-a7f8-6d8e3ef80cd0.png",
1112
+ "title": "Tinker Bell Flux",
1113
+ "repo": "Omarito2412/Tinker-Bell-Flux",
1114
+ "weights": "TinkerBellV2-FLUX.safetensors",
1115
+ "trigger_word": "TinkerWaifu, blue eyes, single hair bun"
1116
+ },
1117
+ #103
1118
+ {
1119
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-playful-metropolis/resolve/main/images/3e9265312b3b726c224a955ec9254a0f95c2c8b78ce635929183a075.jpg",
1120
+ "title": "Playful Metropolis",
1121
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-playful-metropolis",
1122
+ "weights": "FLUX-dev-lora-playful_metropolis.safetensors",
1123
+ "trigger_word": ""
1124
+ },
1125
+ #104
1126
+ {
1127
+ "image": "https://huggingface.co/prithivMLmods/Castor-Character-Polygon-LoRA/resolve/main/images/1000.webp",
1128
+ "title": "Character Polygon",
1129
+ "repo": "prithivMLmods/Castor-Character-Polygon-Flux-LoRA",
1130
+ "weights": "Castor-Character-Polygon-LoRA.safetensors",
1131
+ "trigger_word": "3D Polygon"
1132
+ },
1133
+ #105
1134
+ {
1135
+ "image": "https://huggingface.co/prithivMLmods/Castor-Gta6-Theme-Flux-LoRA/resolve/main/images/gta1.webp",
1136
+ "title": "GTA 6 Theme",
1137
+ "repo": "prithivMLmods/Castor-Gta6-Theme-Flux-LoRA",
1138
+ "weights": "Gta6.safetensors",
1139
+ "trigger_word": "GTA 6 Theme, World of GTA 6"
1140
+ },
1141
+ #106
1142
+ {
1143
+ "image": "https://huggingface.co/prithivMLmods/Castor-Concept-Gta6-Character-Design/resolve/main/images/L3.webp",
1144
+ "title": "GTA Character Concept",
1145
+ "repo": "prithivMLmods/Castor-Flux-Concept-Gta6-Character-Design",
1146
+ "weights": "Gta6-Concept-Charecter.safetensors",
1147
+ "trigger_word": "Jason, Lucia, GTA 6"
1148
+ },
1149
+ #107
1150
+ {
1151
+ "image": "https://huggingface.co/prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA/resolve/main/images/S1.png",
1152
+ "title": "3D Sketchfab",
1153
+ "repo": "prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA",
1154
+ "weights": "Castor-3D-Sketchfab-Flux-LoRA.safetensors",
1155
+ "trigger_word": "3D Sketchfab"
1156
+ },
1157
+ #108
1158
+ {
1159
+ "image": "https://huggingface.co/prithivMLmods/Castor-Collage-Dim-Flux-LoRA/resolve/main/images/C1.webp",
1160
+ "title": "In Image Collage",
1161
+ "repo": "prithivMLmods/Castor-Collage-Dim-Flux-LoRA",
1162
+ "weights": "Castor-Collage-Dim-Flux-LoRA.safetensors",
1163
+ "trigger_word": "collage"
1164
+ },
1165
+ #109
1166
+ {
1167
+ "image": "https://huggingface.co/brushpenbob/flux-midjourney-anime/resolve/main/25439344.jpeg",
1168
+ "title": "Anime Journey",
1169
+ "repo": "brushpenbob/flux-midjourney-anime",
1170
+ "weights": "FLUX_MidJourney_Anime.safetensors",
1171
+ "trigger_word": "egmid"
1172
+ },
1173
+ #110
1174
+ {
1175
+ "image": "https://huggingface.co/glif-loradex-trainer/maxxd4240_minimalistPastel/resolve/main/samples/1727255690613__000002500_0.jpg",
1176
+ "title": "Min Pastel",
1177
+ "repo": "glif-loradex-trainer/maxxd4240_minimalistPastel",
1178
+ "weights": "minimalistPastel.safetensors",
1179
+ "trigger_word": "minimalistPastel"
1180
+ },
1181
+ #111
1182
+ {
1183
+ "image": "https://huggingface.co/prithivMLmods/Castor-Red-Dead-Redemption-2-Flux-LoRA/resolve/main/images/rdr12.webp",
1184
+ "title": "RDR2",
1185
+ "repo": "prithivMLmods/Castor-Red-Dead-Redemption-2-Flux-LoRA",
1186
+ "weights": "Castor-Red-Dead-Redemption-2-Flux-LoRA.safetensors",
1187
+ "trigger_word": "Red Dead Redemption 2"
1188
+ },
1189
+ #112
1190
+ {
1191
+ "image": "https://huggingface.co/WizWhite/wizard-s-paper-model-universe/resolve/main/35746354.jpeg",
1192
+ "title": "Paper Model",
1193
+ "repo": "WizWhite/wizard-s-paper-model-universe",
1194
+ "weights": "Wiz-Paper_Model_Universe.safetensors",
1195
+ "trigger_word": "A paper model"
1196
+ },
1197
+ #113
1198
+ {
1199
+ "image": "https://huggingface.co/renderartist/retrocomicflux/resolve/main/images/ComfyUI_temp_ipugi_00040_.png",
1200
+ "title": "Retrocomic Flux",
1201
+ "repo": "renderartist/retrocomicflux",
1202
+ "weights": "Retro_Comic_Flux_v1_renderartist.safetensors",
1203
+ "trigger_word": "comic book panel"
1204
+ },
1205
+ #114
1206
+ {
1207
+ "image": "https://huggingface.co/prithivMLmods/Castor-Happy-Halloween-Flux-LoRA/resolve/main/images/hw1.webp",
1208
+ "title": "Halloween Flux",
1209
+ "repo": "prithivMLmods/Castor-Happy-Halloween-Flux-LoRA",
1210
+ "weights": "Castor-Happy-Halloween-Flux-LoRA.safetensors",
1211
+ "trigger_word": "happy halloween"
1212
+ },
1213
+ #115
1214
+ {
1215
+ "image": "https://huggingface.co/prithivMLmods/Castor-3D-Portrait-Flux-LoRA/resolve/main/images/1.webp",
1216
+ "title": "Castor-3D-Portrait",
1217
+ "repo": "prithivMLmods/Castor-3D-Portrait-Flux-LoRA",
1218
+ "weights": "Castor-3D-Portrait-Flux-LoRA.safetensors",
1219
+ "trigger_word": "3D Portrait"
1220
+ },
1221
+ #116
1222
+ {
1223
+ "image": "https://huggingface.co/renderartist/coloringbookflux/resolve/main/images/ComfyUI_09731_.png",
1224
+ "title": "Coloring book flux",
1225
+ "repo": "renderartist/coloringbookflux",
1226
+ "weights": "c0l0ringb00k_Flux_v1_renderartist.safetensors",
1227
+ "trigger_word": "c0l0ringb00k, coloring book, coloring book page"
1228
+ },
1229
+ #117
1230
+ {
1231
+ "image": "https://huggingface.co/prithivMLmods/Uncoloured-Polygon-Flux-LoRA/resolve/main/images/1.webp",
1232
+ "title": "Uncoloured Polygon",
1233
+ "repo": "prithivMLmods/Uncoloured-Polygon-Flux-LoRA",
1234
+ "weights": "Uncoloured-3D-Polygon.safetensors",
1235
+ "trigger_word": "uncoloured polygon"
1236
+ },
1237
+ #118
1238
+ {
1239
+ "image": "https://huggingface.co/prithivMLmods/Past-Present-Deep-Mix-Flux-LoRA/resolve/main/images/PP3.webp",
1240
+ "title": "Past Present Mix",
1241
+ "repo": "prithivMLmods/Past-Present-Deep-Mix-Flux-LoRA",
1242
+ "weights": "Past-Present-Deep-Mix-Flux-LoRA.safetensors",
1243
+ "trigger_word": "Mixing Past and Present"
1244
+ },
1245
+ #119
1246
+ {
1247
+ "image": "https://huggingface.co/gokaygokay/Flux-Double-Exposure-LoRA/resolve/main/images/image3.jpg",
1248
+ "title": "Double Exposure",
1249
+ "repo": "gokaygokay/Flux-Double-Exposure-LoRA",
1250
+ "weights": "double_exposure.safetensors",
1251
+ "trigger_word": "dblxpsr"
1252
+ },
1253
+ #120
1254
+ {
1255
+ "image": "https://huggingface.co/gokaygokay/Flux-Seamless-Texture-LoRA/resolve/main/images/image3.jpg",
1256
+ "title": "Seamless Texture",
1257
+ "repo": "gokaygokay/Flux-Seamless-Texture-LoRA",
1258
+ "weights": "seamless_texture.safetensors",
1259
+ "trigger_word": "smlstxtr"
1260
+ },
1261
+ #121
1262
+ {
1263
+ "image": "https://huggingface.co/prithivMLmods/Mockup-Texture-Flux-LoRA/resolve/main/images/MU1.webp",
1264
+ "title": "Mockup Texture",
1265
+ "repo": "prithivMLmods/Mockup-Texture-Flux-LoRA",
1266
+ "weights": "Mockup-Texture.safetensors",
1267
+ "trigger_word": "Mockup"
1268
+ },
1269
+ #122
1270
+ {
1271
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA/resolve/main/images/c2.webp",
1272
+ "title": "Tarot Cards",
1273
+ "repo": "prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA",
1274
+ "weights": "Tarot-card.safetensors",
1275
+ "trigger_word": "Tarot card"
1276
+ },
1277
+ #123
1278
+ {
1279
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Amxtoon-Flux-LoRA/resolve/main/images/am1.webp",
1280
+ "title": "Amxtoon",
1281
+ "repo": "prithivMLmods/Ton618-Amxtoon-Flux-LoRA",
1282
+ "weights": "Amxtoon.safetensors",
1283
+ "trigger_word": "Amxtoon"
1284
+ },
1285
+ #124
1286
+ {
1287
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Epic-Realism-Flux-LoRA/resolve/main/images/ep3.png",
1288
+ "title": "Epic Realism",
1289
+ "repo": "prithivMLmods/Ton618-Epic-Realism-Flux-LoRA",
1290
+ "weights": "Epic-Realism-Unpruned.safetensors",
1291
+ "trigger_word": "Epic Realism"
1292
+ },
1293
+ #125
1294
+ {
1295
+ "image": "https://huggingface.co/bingbangboom/flux-mixReality/resolve/main/images/3.jpg",
1296
+ "title": "Mixed Reality",
1297
+ "repo": "bingbangboom/flux-mixReality",
1298
+ "weights": "HLFILSTHLFPHTO_000002500.safetensors",
1299
+ "trigger_word": "in the style of HLFILSTHLFPHTO"
1300
+ },
1301
+ #126
1302
+ {
1303
+ "image": "https://huggingface.co/sWizad/pokemon-trainer-sprites-pixelart-flux/resolve/main/26578919.jpeg",
1304
+ "title": "Pixelart",
1305
+ "repo": "sWizad/pokemon-trainer-sprites-pixelart-flux",
1306
+ "weights": "pktrainer_F1-v1-0.safetensors",
1307
+ "trigger_word": "pixel image of, pixel art"
1308
+ },
1309
+ #127
1310
+ {
1311
+ "image": "https://huggingface.co/bingbangboom/flux_colorscape/resolve/main/images/2.jpg",
1312
+ "title": "Colorscape",
1313
+ "repo": "bingbangboom/flux_colorscape",
1314
+ "weights": "flux_colorscape.safetensors",
1315
+ "trigger_word": "illustration in the style of ASstyle001"
1316
+ },
1317
+ #128
1318
+ {
1319
+ "image": "https://huggingface.co/UmeAiRT/FLUX.1-dev-LoRA-Modern_Pixel_art/resolve/main/images/c363192f-5fa0-4539-8295-b8d9e3e96747.jpeg",
1320
+ "title": "Modern Pixel art",
1321
+ "repo": "UmeAiRT/FLUX.1-dev-LoRA-Modern_Pixel_art",
1322
+ "weights": "ume_modern_pixelart.safetensors",
1323
+ "trigger_word": "umempart"
1324
+ },
1325
+ #129
1326
+ {
1327
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Only-Stickers-Flux-LoRA/resolve/main/images/222.png",
1328
+ "title": "Sticker",
1329
+ "repo": "prithivMLmods/Ton618-Only-Stickers-Flux-LoRA",
1330
+ "weights": "only-stickers.safetensors",
1331
+ "trigger_word": "Only Sticker"
1332
+ },
1333
+ #130
1334
+ {
1335
+ "image": "https://huggingface.co/prithivMLmods/Ton618-Space-Wallpaper-LoRA/resolve/main/images/222.png",
1336
+ "title": "Space Wallpaper",
1337
+ "repo": "prithivMLmods/Ton618-Space-Wallpaper-LoRA",
1338
+ "weights": "space-wallpaper-xl.safetensor",
1339
+ "trigger_word": "Space Wallpaper"
1340
+ },
1341
+ #131
1342
+ {
1343
+ "image": "https://huggingface.co/prithivMLmods/Canopus-Pixar-3D-Flux-LoRA/resolve/main/images/11111.png",
1344
+ "title": "Pixar 3D",
1345
+ "repo": "prithivMLmods/Canopus-Pixar-3D-Flux-LoRA",
1346
+ "weights": "Canopus-Pixar-3D-FluxDev-LoRA.safetensors",
1347
+ "trigger_word": "Pixar 3D"
1348
+ },
1349
+ #132
1350
+ {
1351
+ "image": "https://huggingface.co/prithivMLmods/EBook-Creative-Cover-Flux-LoRA/resolve/main/images/E2.png",
1352
+ "title": "EBook Cover",
1353
+ "repo": "prithivMLmods/EBook-Creative-Cover-Flux-LoRA",
1354
+ "weights": "EBook-Cover.safetensors",
1355
+ "trigger_word": "EBook Cover"
1356
+ },
1357
+ #133
1358
+ {
1359
+ "image": "https://huggingface.co/prithivMLmods/Minimal-Futuristic-Flux-LoRA/resolve/main/images/MF3.png",
1360
+ "title": "Minimal Futuristic",
1361
+ "repo": "prithivMLmods/Minimal-Futuristic-Flux-LoRA",
1362
+ "weights": "Minimal-Futuristic.safetensors",
1363
+ "trigger_word": "Minimal Futuristic"
1364
+ },
1365
+ #134
1366
+ {
1367
+ "image": "https://huggingface.co/prithivMLmods/Seamless-Pattern-Design-Flux-LoRA/resolve/main/images/SP1.png",
1368
+ "title": "Seamless Pattern",
1369
+ "repo": "prithivMLmods/Seamless-Pattern-Design-Flux-LoRA",
1370
+ "weights": "Seamless-Pattern-Design.safetensors",
1371
+ "trigger_word": "Seamless Pattern Design"
1372
+ },
1373
+ #135
1374
+ {
1375
+ "image": "https://huggingface.co/prithivMLmods/Logo-Design-Flux-LoRA/resolve/main/images/LD1.png",
1376
+ "title": "Logo Design",
1377
+ "repo": "prithivMLmods/Logo-Design-Flux-LoRA",
1378
+ "weights": "Logo-design.safetensors",
1379
+ "trigger_word": "Logo Design"
1380
+ },
1381
+ #136
1382
+ {
1383
+ "image": "https://huggingface.co/prithivMLmods/Coloring-Book-Flux-LoRA/resolve/main/images/EB1.png",
1384
+ "title": "Coloring Book",
1385
+ "repo": "prithivMLmods/Coloring-Book-Flux-LoRA",
1386
+ "weights": "coloring-book.safetensors",
1387
+ "trigger_word": "Coloring Book"
1388
+ },
1389
+ #137
1390
+ {
1391
+ "image": "https://huggingface.co/prithivMLmods/Intense-Red-Flux-LoRA/resolve/main/images/IR1.png",
1392
+ "title": "Intense Red",
1393
+ "repo": "prithivMLmods/Intense-Red-Flux-LoRA",
1394
+ "weights": "Intense-Red.safetensors",
1395
+ "trigger_word": "Intense Red"
1396
+ },
1397
+ #138
1398
+ {
1399
+ "image": "https://huggingface.co/prithivMLmods/Glowing-Body-Flux-LoRA/resolve/main/images/GB3.png",
1400
+ "title": "Glowing Body Flux",
1401
+ "repo": "prithivMLmods/Glowing-Body-Flux-LoRA",
1402
+ "weights": "Glowing-Body.safetensors",
1403
+ "trigger_word": "Glowing Body"
1404
+ },
1405
+ #139
1406
+ {
1407
+ "image": "https://huggingface.co/prithivMLmods/Electric-Blue-Flux-LoRA/resolve/main/images/EB3.png",
1408
+ "title": "Electric Blue",
1409
+ "repo": "prithivMLmods/Electric-Blue-Flux-LoRA",
1410
+ "weights": "Electric-Blue.safetensors",
1411
+ "trigger_word": "Electric Blue"
1412
+ },
1413
+ #140
1414
+ {
1415
+ "image": "https://huggingface.co/prithivMLmods/Clouds-Illusion-Flux-LoRA/resolve/main/images/CI2.png",
1416
+ "title": "Clouds Illusion",
1417
+ "repo": "prithivMLmods/Clouds-Illusion-Flux-LoRA",
1418
+ "weights": "Clouds-Illusion.safetensors",
1419
+ "trigger_word": "Clouds Illusion"
1420
+ },
1421
+ #141
1422
+ {
1423
+ "image": "https://huggingface.co/prithivMLmods/Digital-Yellow-Flux-LoRA/resolve/main/images/DY3.png",
1424
+ "title": "Digital Yellow",
1425
+ "repo": "prithivMLmods/Digital-Yellow-Flux-LoRA",
1426
+ "weights": "Digital-Yellow.safetensors",
1427
+ "trigger_word": "Digital Yellow"
1428
+ },
1429
+ #142
1430
+ {
1431
+ "image": "https://huggingface.co/cfahlgren1/flux-qwen-capybara/resolve/main/images/example_72ao6twvk.png",
1432
+ "title": "Flux Qwen Capybara",
1433
+ "repo": "cfahlgren1/flux-qwen-capybara",
1434
+ "weights": "flux-qwen-capybara.safetensors",
1435
+ "trigger_word": "QWENCAPY"
1436
+ },
1437
+ #143
1438
+ {
1439
+ "image": "https://huggingface.co/dasdsff/PleinAirArt/resolve/main/images/e7499ccc-7504-4086-842f-275a5428ef0e.jpg",
1440
+ "title": "Plein Air Art ",
1441
+ "repo": "dasdsff/PleinAirArt",
1442
+ "weights": "PleinAir_000002500.safetensors",
1443
+ "trigger_word": "P1e!n"
1444
+ },
1445
+ #144
1446
+ {
1447
+ "image": "https://huggingface.co/prithivMLmods/Orange-Chroma-Flux-LoRA/resolve/main/images/OC1.png",
1448
+ "title": "Orange Chroma",
1449
+ "repo": "prithivMLmods/Orange-Chroma-Flux-LoRA",
1450
+ "weights": "Orange-Chroma.safetensors",
1451
+ "trigger_word": "Orange Chroma"
1452
+ },
1453
+ #145
1454
+ {
1455
+ "image": "https://huggingface.co/prithivMLmods/Lime-Green-Flux-LoRA/resolve/main/images/LM1.png",
1456
+ "title": "Lime Green",
1457
+ "repo": "prithivMLmods/Lime-Green-Flux-LoRA",
1458
+ "weights": "Lime-Green.safetensors",
1459
+ "trigger_word": "Lime Green"
1460
+ },
1461
+ #146
1462
+ {
1463
+ "image": "https://huggingface.co/prithivMLmods/Fractured-Line-Flare/resolve/main/images/FS1.png",
1464
+ "title": "Line Flare",
1465
+ "repo": "prithivMLmods/Fractured-Line-Flare",
1466
+ "weights": "Fractured-Line-Flare.safetensors",
1467
+ "trigger_word": "Fractured Line Flare"
1468
+ },
1469
+ #147
1470
+ {
1471
+ "image": "https://huggingface.co/prithivMLmods/Golden-Dust-Flux-LoRA/resolve/main/images/GD2.png",
1472
+ "title": "Golden Dust",
1473
+ "repo": "prithivMLmods/Golden-Dust-Flux-LoRA",
1474
+ "weights": "Golden-Dust.safetensors",
1475
+ "trigger_word": "Golden Dust"
1476
+ },
1477
+ #148
1478
+ {
1479
+ "image": "https://huggingface.co/prithivMLmods/Castor-Dramatic-Neon-Flux-LoRA/resolve/main/images/DN2.webp",
1480
+ "title": "Dramatic Neon",
1481
+ "repo": "prithivMLmods/Castor-Dramatic-Neon-Flux-LoRA",
1482
+ "weights": "Dramatic-Neon-Flux-LoRA.safetensors",
1483
+ "trigger_word": "Dramatic Neon"
1484
+ },
1485
+ #149
1486
+ {
1487
+ "image": "https://huggingface.co/tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator/resolve/main/images/sample7.jpeg",
1488
+ "title": "Outfit Generator",
1489
+ "repo": "tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator",
1490
+ "weights": "outfit-generator.safetensors",
1491
+ "trigger_word": "Outfit"
1492
+ },
1493
+ #150
1494
+ {
1495
+ "image": "https://huggingface.co/davisbro/half_illustration/resolve/main/images/example1.webp",
1496
+ "title": "Half Illustration",
1497
+ "repo": "davisbro/half_illustration",
1498
+ "weights": "flux_train_replicate.safetensors",
1499
+ "trigger_word": "in the style of TOK"
1500
+ },
1501
+ #151
1502
+ {
1503
+ "image": "https://huggingface.co/bingbangboom/flux_oilscape/resolve/main/extras/3.jpg",
1504
+ "title": "Oilscape",
1505
+ "repo": "bingbangboom/flux_oilscape",
1506
+ "weights": "flux_Oilstyle.safetensors",
1507
+ "trigger_word": "in the style of Oilstyle002"
1508
+ },
1509
+ #152
1510
+ {
1511
+ "image": "https://huggingface.co/prithivMLmods/Red-Undersea-Flux-LoRA/resolve/main/images/RU1.png",
1512
+ "title": "Red Undersea Flux",
1513
+ "repo": "prithivMLmods/Red-Undersea-Flux-LoRA",
1514
+ "weights": "Red-Undersea.safetensors",
1515
+ "trigger_word": "Red Undersea"
1516
+ },
1517
+ #153
1518
+ {
1519
+ "image": "https://huggingface.co/prithivMLmods/3D-Render-Flux-LoRA/resolve/main/images/3D2.png",
1520
+ "title": "3D Render Flux LoRA",
1521
+ "repo": "prithivMLmods/3D-Render-Flux-LoRA",
1522
+ "weights": "3D_Portrait.safetensors",
1523
+ "trigger_word": "3D Portrait, 3d render"
1524
+ },
1525
+ #154
1526
+ {
1527
+ "image": "https://huggingface.co/prithivMLmods/Yellow-Pop-Flux-Dev-LoRA/resolve/main/images/YP1.png",
1528
+ "title": "Yellow Pop Flux",
1529
+ "repo": "prithivMLmods/Yellow-Pop-Flux-Dev-LoRA",
1530
+ "weights": "Yellow_Pop.safetensors",
1531
+ "trigger_word": "Yellow Pop"
1532
+ },
1533
+ #155
1534
+ {
1535
+ "image": "https://huggingface.co/prithivMLmods/Purple-Grid-Flux-LoRA/resolve/main/images/PG2.png",
1536
+ "title": "Purple Grid Flux",
1537
+ "repo": "prithivMLmods/Purple-Grid-Flux-LoRA",
1538
+ "weights": "Purple_Grid.safetensors",
1539
+ "trigger_word": "Purple Grid"
1540
+ },
1541
+ #156
1542
+ {
1543
+ "image": "https://huggingface.co/prithivMLmods/Dark-Thing-Flux-LoRA/resolve/main/images/DT2.png",
1544
+ "title": "Dark Thing Flux",
1545
+ "repo": "prithivMLmods/Dark-Thing-Flux-LoRA",
1546
+ "weights": "Dark_Creature.safetensors",
1547
+ "trigger_word": "Dark Creature"
1548
+ },
1549
+ #157
1550
+ {
1551
+ "image": "https://huggingface.co/prithivMLmods/Shadow-Projection-Flux-LoRA/resolve/main/images/SP2.png",
1552
+ "title": "Shadow Projection",
1553
+ "repo": "prithivMLmods/Shadow-Projection-Flux-LoRA",
1554
+ "weights": "Shadow-Projection.safetensors",
1555
+ "trigger_word": "Shadow Projection"
1556
+ },
1557
+ #158
1558
+ {
1559
+ "image": "https://huggingface.co/prithivMLmods/Street-Bokeh-Flux-LoRA/resolve/main/images/SB2.png",
1560
+ "title": "Street Bokeh",
1561
+ "repo": "prithivMLmods/Street-Bokeh-Flux-LoRA",
1562
+ "weights": "Street_Bokeh.safetensors",
1563
+ "trigger_word": "Street Bokeh"
1564
+ },
1565
+ #159
1566
+ {
1567
+ "image": "https://huggingface.co/prithivMLmods/Abstract-Cartoon-Flux-LoRA/resolve/main/images/AC2.png",
1568
+ "title": "Abstract Cartoon",
1569
+ "repo": "prithivMLmods/Abstract-Cartoon-Flux-LoRA",
1570
+ "weights": "Abstract-Cartoon.safetensors",
1571
+ "trigger_word": "Abstract Cartoon"
1572
+ },
1573
+ #160
1574
+ {
1575
+ "image": "https://huggingface.co/Norod78/CartoonStyle-flux-lora/resolve/main/samples/1725344450635__000003800_1.jpg",
1576
+ "title": "Cartoon Style Flux",
1577
+ "repo": "Norod78/CartoonStyle-flux-lora",
1578
+ "weights": "CartoonStyle_flux_lora.safetensors",
1579
+ "trigger_word": ""
1580
+ },
1581
+ #161
1582
+ {
1583
+ "image": "https://huggingface.co/prithivMLmods/Digital-Chaos-Flux-LoRA/resolve/main/images/HDRDC3.webp",
1584
+ "title": "HDR Digital Chaos",
1585
+ "repo": "prithivMLmods/Digital-Chaos-Flux-LoRA",
1586
+ "weights": "HDR-Digital-Chaos.safetensors",
1587
+ "trigger_word": "Digital Chaos"
1588
+ },
1589
+ #162
1590
+ {
1591
+ "image": "https://huggingface.co/prithivMLmods/Yellow-Laser-Flux-LoRA/resolve/main/images/YL1.png",
1592
+ "title": "Yellow Laser",
1593
+ "repo": "prithivMLmods/Yellow-Laser-Flux-LoRA",
1594
+ "weights": "Yellow-Laser.safetensors",
1595
+ "trigger_word": "Yellow Lasers"
1596
+ },
1597
+ #163
1598
+ {
1599
+ "image": "https://huggingface.co/prithivMLmods/Bold-Shadows-Flux-LoRA/resolve/main/images/BS1.png",
1600
+ "title": "Bold Shadows",
1601
+ "repo": "prithivMLmods/Bold-Shadows-Flux-LoRA",
1602
+ "weights": "Bold-Shadows.safetensors",
1603
+ "trigger_word": "Bold Shadows"
1604
+ },
1605
+ #164
1606
+ {
1607
+ "image": "https://huggingface.co/prithivMLmods/Knitted-Character-Flux-LoRA/resolve/main/images/KC1.png",
1608
+ "title": "Knitted Character",
1609
+ "repo": "prithivMLmods/Knitted-Character-Flux-LoRA",
1610
+ "weights": "Knitted-Character.safetensors",
1611
+ "trigger_word": "Knitted Character"
1612
+ },
1613
+ #165
1614
+ {
1615
+ "image": "https://huggingface.co/alvdansen/frosting_lane_flux/resolve/main/images/content%20-%202024-08-11T010011.238.jpeg",
1616
+ "title": "Frosting Lane",
1617
+ "repo": "alvdansen/frosting_lane_flux",
1618
+ "trigger_word": "frstingln illustration"
1619
+ },
1620
+ #166
1621
+ {
1622
+ "image": "https://huggingface.co/prithivMLmods/Flux-Realism-FineDetailed/resolve/main/images/FD2.png",
1623
+ "title": "Fine Detailed Character",
1624
+ "repo": "prithivMLmods/Flux-Realism-FineDetailed",
1625
+ "weights": "Flux-Realism-FineDetailed.safetensors",
1626
+ "trigger_word": "Fine Detailed"
1627
+ },
1628
+ #167
1629
+ {
1630
+ "image": "https://huggingface.co/prithivMLmods/Aura-9999/resolve/main/images/A3.png",
1631
+ "title": "Aura 9999+",
1632
+ "repo": "prithivMLmods/Aura-9999",
1633
+ "weights": "Aura-9999.safetensors",
1634
+ "trigger_word": "Aura 9999"
1635
+ },
1636
+ #168
1637
+ {
1638
+ "image": "https://huggingface.co/prithivMLmods/Pastel-BG-Flux-LoRA/resolve/main/images/PB2.png",
1639
+ "title": "Pastel BG",
1640
+ "repo": "prithivMLmods/Pastel-BG-Flux-LoRA",
1641
+ "weights": "Pastel-BG.safetensors",
1642
+ "trigger_word": "Pastel BG"
1643
+ },
1644
+ #169
1645
+ {
1646
+ "image": "https://huggingface.co/prithivMLmods/Green-Cartoon-Flux-LoRA/resolve/main/images/GC1.png",
1647
+ "title": "Green Cartoon",
1648
+ "repo": "prithivMLmods/Green-Cartoon-Flux-LoRA",
1649
+ "weights": "Green-Cartoon.safetensors",
1650
+ "trigger_word": "Green Cartoon"
1651
+ },
1652
+ #170
1653
+ {
1654
+ "image": "https://huggingface.co/prithivMLmods/Retro-Pixel-Flux-LoRA/resolve/main/images/RP1.png",
1655
+ "title": "Retro Pixel",
1656
+ "repo": "prithivMLmods/Retro-Pixel-Flux-LoRA",
1657
+ "weights": "Retro-Pixel.safetensors",
1658
+ "trigger_word": "Retro Pixel"
1659
+ },
1660
+ #171
1661
+ {
1662
+ "image": "https://huggingface.co/prithivMLmods/Teen-Outfit/resolve/main/images/TO2.png",
1663
+ "title": "Teen Outfit",
1664
+ "repo": "prithivMLmods/Teen-Outfit",
1665
+ "weights": "Teen-Outfit.safetensors",
1666
+ "trigger_word": "Teen Outfit"
1667
+ },
1668
+ #172
1669
+ {
1670
+ "image": "https://huggingface.co/prithivMLmods/CAnime-LoRA/resolve/main/images/CA3.png",
1671
+ "title": "CAnime",
1672
+ "repo": "prithivMLmods/CAnime-LoRA",
1673
+ "weights": "CAnime.safetensors",
1674
+ "trigger_word": "CAnime"
1675
+ },
1676
+ #173
1677
+ {
1678
+ "image": "https://huggingface.co/prithivMLmods/Super-Pencil-Flux-LoRA/resolve/main/images/SP1.png",
1679
+ "title": "Simple Pencil",
1680
+ "repo": "prithivMLmods/Super-Pencil-Flux-LoRA",
1681
+ "weights": "Pencil.safetensors",
1682
+ "trigger_word": "Simple Pencil"
1683
+ },
1684
+ #174
1685
+ {
1686
+ "image": "https://huggingface.co/martintomov/retrofuturism-flux/resolve/main/images/2e40deba-858e-454f-ae1c-d1ba2adb6a65.jpeg",
1687
+ "title": "Retro futurism",
1688
+ "repo": "martintomov/retrofuturism-flux",
1689
+ "weights": "retrofuturism_flux_lora_martintomov_v1.safetensors",
1690
+ "trigger_word": "retrofuturism"
1691
+ },
1692
+ #175
1693
+ {
1694
+ "image": "https://huggingface.co/Bootoshi/retroanime/resolve/main/images/9f21dffe-c4da-46c0-b0a6-e06257cf98d6.webp",
1695
+ "title": "Retro Anime",
1696
+ "repo": "Bootoshi/retroanime",
1697
+ "weights": "RetroAnimeFluxV1.safetensors",
1698
+ "trigger_word": "retro anime"
1699
+ },
1700
+ #176
1701
+ {
1702
+ "image": "https://huggingface.co/alvdansen/plushy-world-flux/resolve/main/images/ComfyUI_00666_%20(1).png",
1703
+ "title": "Plushy world",
1704
+ "repo": "alvdansen/plushy-world-flux",
1705
+ "weights": "plushy_world_flux_araminta_k.safetensors",
1706
+ "trigger_word": "3dcndylnd style"
1707
+ },
1708
+ #177
1709
+ {
1710
+ "image": "https://huggingface.co/renderartist/ROYGBIVFlux/resolve/main/images/ComfyUI_temp_qpxhm_00154_.png",
1711
+ "title": "ROYGBIVFlux",
1712
+ "repo": "renderartist/ROYGBIVFlux",
1713
+ "weights": "ROYGBIV_Flux_v1_renderartist.safetensors",
1714
+ "trigger_word": "r0ygb1v, digital illustration, textured"
1715
+ },
1716
+ #178
1717
+ {
1718
+ "image": "https://huggingface.co/alvdansen/sonny-anime-flex/resolve/main/images/GLuFasaLyEoBaAUQMREVf_20b5cf5b178a404296978e360a9ac435.png",
1719
+ "title": "sonny anime",
1720
+ "repo": "alvdansen/sonny-anime-flex",
1721
+ "weights": "araminta_k_sonnyanime_fluxd_flex.safetensors",
1722
+ "trigger_word": "nm22 [style] style"
1723
+ },
1724
+ #179
1725
+ {
1726
+ "image": "https://huggingface.co/bingbangboom/flux_whimscape/resolve/main/images/2.png",
1727
+ "title": "flux whimscape",
1728
+ "repo": "bingbangboom/flux_whimscape",
1729
+ "weights": "WHMSCPE001.safetensors",
1730
+ "trigger_word": "illustration in the style of WHMSCPE001"
1731
+ },
1732
+ #180
1733
+ {
1734
+ "image": "https://huggingface.co/glif-loradex-trainer/AP123_movie_shots_ic_lora_experiment_v1/resolve/main/samples/1730923312010__000000500_1.jpg",
1735
+ "title": "movie shots ic lora",
1736
+ "repo": "glif-loradex-trainer/AP123_movie_shots_ic_lora_experiment_v1",
1737
+ "weights": "movie_shots_ic_lora_experiment_v1.safetensors",
1738
+ "trigger_word": "MOVIE-SHOTS"
1739
+ },
1740
+ #181
1741
+ {
1742
+ "image": "https://huggingface.co/glif/LiDAR-Vision/resolve/main/images/f8f1995e-c583-425b-b73a-f3e873ce1005.png",
1743
+ "title": "LiDAR",
1744
+ "repo": "glif/LiDAR-Vision",
1745
+ "weights": "Lidar.safetensors",
1746
+ "trigger_word": "L1d4r"
1747
+ },
1748
+ #182
1749
+ {
1750
+ "image": "https://huggingface.co/prithivMLmods/Canopus-Flux-LoRA-Hoodies/resolve/main/images/XXX.png",
1751
+ "title": "Hoodies",
1752
+ "repo": "prithivMLmods/Canopus-Flux-LoRA-Hoodies",
1753
+ "weights": "Canopus-Flux-LoRA-Hoodies.safetensors",
1754
+ "trigger_word": "Hoodie"
1755
+ },
1756
+ #183
1757
+ {
1758
+ "image": "https://huggingface.co/dvyio/flux-lora-rdr2/resolve/main/images/RTqPoC9s0M1wNhago27OV_dda06f47ee764202aa5e55efa923b94e.jpg",
1759
+ "title": "World of RDR",
1760
+ "repo": "dvyio/flux-lora-rdr2",
1761
+ "weights": "eb79a593332f40458ea36fe0782f01a4_pytorch_lora_weights.safetensors",
1762
+ "trigger_word": "in the style of RDRGM"
1763
+ },
1764
+ #184
1765
+ {
1766
+ "image": "https://huggingface.co/Fihade/Retro-Collage-Art-Flux-Dev/resolve/main/images/005.jpeg",
1767
+ "title": "Retro Collage Art",
1768
+ "repo": "Fihade/Retro-Collage-Art-Flux-Dev",
1769
+ "weights": "flux_dev_ff_collage_artstyle.safetensors",
1770
+ "trigger_word": "ff-collage"
1771
+ },
1772
+ #185
1773
+ {
1774
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Quote-LoRA/resolve/main/images/QQ2.png",
1775
+ "title": "Quote",
1776
+ "repo": "prithivMLmods/Flux.1-Dev-Quote-LoRA",
1777
+ "weights": "quoter001.safetensors",
1778
+ "trigger_word": "quoter"
1779
+ },
1780
+ #186
1781
+ {
1782
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Stamp-Art-LoRA/resolve/main/images/SS2.png",
1783
+ "title": "Stamp",
1784
+ "repo": "prithivMLmods/Flux.1-Dev-Stamp-Art-LoRA",
1785
+ "weights": "stam9.safetensors",
1786
+ "trigger_word": "stam9"
1787
+ },
1788
+ #187
1789
+ {
1790
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Hand-Sticky-LoRA/resolve/main/images/H3.png",
1791
+ "title": "Hand Sticky",
1792
+ "repo": "prithivMLmods/Flux.1-Dev-Hand-Sticky-LoRA",
1793
+ "weights": "handstick69.safetensors",
1794
+ "trigger_word": "handstick69"
1795
+ },
1796
+ #188
1797
+ {
1798
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Poster-HQ-LoRA/resolve/main/images/PP2.png",
1799
+ "title": "Poster Foss",
1800
+ "repo": "prithivMLmods/Flux.1-Dev-Poster-HQ-LoRA",
1801
+ "weights": "poster-foss.safetensors",
1802
+ "trigger_word": "poster foss"
1803
+ },
1804
+ #189
1805
+ {
1806
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Ctoon-LoRA/resolve/main/images/C3.png",
1807
+ "title": "Ctoon",
1808
+ "repo": "prithivMLmods/Flux.1-Dev-Ctoon-LoRA",
1809
+ "weights": "ctoon.safetensors",
1810
+ "trigger_word": "ctoon"
1811
+ },
1812
+ #190
1813
+ {
1814
+ "image": "https://huggingface.co/prithivMLmods/Flux-C33-Design-LoRA/resolve/main/images/3.png",
1815
+ "title": "C33 Design",
1816
+ "repo": "prithivMLmods/Flux-C33-Design-LoRA",
1817
+ "weights": "C33.safetensors",
1818
+ "trigger_word": "C33 Design"
1819
+ },
1820
+ #191
1821
+ {
1822
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Indo-Realism-LoRA/resolve/main/images/333.png",
1823
+ "title": "Indo Realism",
1824
+ "repo": "prithivMLmods/Flux.1-Dev-Indo-Realism-LoRA",
1825
+ "weights": "indo-realism.safetensors",
1826
+ "trigger_word": "indo-realism"
1827
+ },
1828
+ #192
1829
+ {
1830
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Sketch-Card-LoRA/resolve/main/images/SC2.png",
1831
+ "title": "Sketch Card",
1832
+ "repo": "prithivMLmods/Flux.1-Dev-Sketch-Card-LoRA",
1833
+ "weights": "sketchcard.safetensors",
1834
+ "trigger_word": "sketch card"
1835
+ },
1836
+ #193
1837
+ {
1838
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA/resolve/main/images/MB1.png",
1839
+ "title": "Movie Board",
1840
+ "repo": "prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA",
1841
+ "weights": "movieboard.safetensors",
1842
+ "trigger_word": "movieboard"
1843
+ },
1844
+ #194
1845
+ {
1846
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Pov-DoorEye-LoRA/resolve/main/images/L4.png",
1847
+ "title": "Door Eye View",
1848
+ "repo": "prithivMLmods/Flux.1-Dev-Pov-DoorEye-LoRA",
1849
+ "weights": "look-in-2.safetensors",
1850
+ "trigger_word": "look in 2"
1851
+ },
1852
+ #195
1853
+ {
1854
+ "image": "https://huggingface.co/alvdansen/enna-sketch-style/resolve/main/images/out-0%20(23).webp",
1855
+ "title": "Enna Sketch",
1856
+ "repo": "alvdansen/enna-sketch-style",
1857
+ "weights": "enna_sketch_style_araminta_k.safetensors",
1858
+ "trigger_word": "sketch illustration style"
1859
+ },
1860
+ #196
1861
+ {
1862
+ "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",
1863
+ "title": "Panorama",
1864
+ "repo": "jbilcke-hf/flux-dev-panorama-lora-2",
1865
+ "weights": "flux_train_replicate.safetensors",
1866
+ "trigger_word": "HDRI panoramic view of TOK"
1867
+ },
1868
+ #197
1869
+ {
1870
+ "image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Micro-landscape-on-Mobile-Phone/resolve/main/images/a29b8763a8f733dea09c1ab07a42263ef6e304cb81be3f5c97fbf8f6.jpg",
1871
+ "title": "Micro Landscape",
1872
+ "repo": "Shakker-Labs/FLUX.1-dev-LoRA-Micro-landscape-on-Mobile-Phone",
1873
+ "weights": "FLUX-dev-lora-micro-landscape.safetensors",
1874
+ "trigger_word": "miniature stereoscopic scene"
1875
+ },
1876
+ #198
1877
+ {
1878
+ "image": "https://huggingface.co/glif-loradex-trainer/goldenark__Ancient_Greece_Watercolor_Sketch_Style/resolve/main/samples/1727152322975__000002000_0.jpg",
1879
+ "title": "Ancient Greece Watercolor",
1880
+ "repo": "glif-loradex-trainer/goldenark__Ancient_Greece_Watercolor_Sketch_Style",
1881
+ "weights": "Ancient_Greece_Watercolor_Sketch_Style.safetensors",
1882
+ "trigger_word": "AncientWaterColorStyle"
1883
+ },
1884
+ #199
1885
+ {
1886
+ "image": "https://huggingface.co/glif-loradex-trainer/i12bp8_appelsiensam_mii_v1/resolve/main/samples/1731918886531__000003000_0.jpg",
1887
+ "title": "M11 PPLSNSM",
1888
+ "repo": "glif-loradex-trainer/i12bp8_appelsiensam_mii_v1",
1889
+ "weights": "appelsiensam_mii_v1.safetensors",
1890
+ "trigger_word": "M11_PPLSNSM"
1891
+ },
1892
+ #200
1893
+ {
1894
+ "image": "https://huggingface.co/glif-loradex-trainer/an303042_RisographPrint_v1/resolve/main/samples/1731852835625__000003000_5.jpg",
1895
+ "title": "RisographPrint",
1896
+ "repo": "glif-loradex-trainer/an303042_RisographPrint_v1",
1897
+ "weights": "RisographPrint_v1.safetensors",
1898
+ "trigger_word": "rsgrf , risograph"
1899
+ },
1900
+ #201
1901
+ {
1902
+ "image": "https://huggingface.co/gokaygokay/Flux-White-Background-LoRA/resolve/main/images/example_mtojzmerf.png",
1903
+ "title": "White Background",
1904
+ "repo": "gokaygokay/Flux-White-Background-LoRA",
1905
+ "weights": "80cfbf52faf541d49c6abfe1ac571112_lora.safetensors",
1906
+ "trigger_word": "in the middle ,white background"
1907
+ },
1908
+ #202
1909
+ {
1910
+ "image": "https://huggingface.co/glif/Gesture-Draw/resolve/main/images/cf8697fb-d6b4-4684-8a1d-82beb9d266ed.jpg",
1911
+ "title": "Gesture Draw",
1912
+ "repo": "glif/Gesture-Draw",
1913
+ "weights": "Gesture_Draw_v1.safetensors",
1914
+ "trigger_word": "gstdrw style"
1915
+ },
1916
+ #203
1917
+ {
1918
+ "image": "https://huggingface.co/MuninStudio/FLUX.1-dev-LoRA-Hard-Flash/resolve/main/images/02.jpg",
1919
+ "title": "Hard Flash",
1920
+ "repo": "MuninStudio/FLUX.1-dev-LoRA-Hard-Flash",
1921
+ "weights": "HRDFLS.safetensors",
1922
+ "trigger_word": "HRDFLS"
1923
+ },
1924
+ #204
1925
+ {
1926
+ "image": "https://huggingface.co/dvyio/flux-lora-the-sims/resolve/main/images/dunBAVBsALOepaE_dsWFI_6b0fef6b0fc4472aa07d00edea7c75b3.jpg",
1927
+ "title": "SIMS",
1928
+ "repo": "dvyio/flux-lora-the-sims",
1929
+ "weights": "011ed14848b3408c8d70d3ecfa14f122_lora.safetensors",
1930
+ "trigger_word": "video game screenshot in the style of THSMS"
1931
+ },
1932
+ #205
1933
+ {
1934
+ "image": "https://huggingface.co/UmeAiRT/FLUX.1-dev-LoRA-Ume_Sky/resolve/main/images/flux_00171_.png",
1935
+ "title": "Umesky",
1936
+ "repo": "UmeAiRT/FLUX.1-dev-LoRA-Ume_Sky",
1937
+ "weights": "ume_sky_v2.safetensors",
1938
+ "trigger_word": "umesky"
1939
+ },
1940
+ #206
1941
+ {
1942
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Realtime-Toon-Mix/resolve/main/images/T1.png",
1943
+ "title": "Realtime Toon Mix",
1944
+ "repo": "prithivMLmods/Flux.1-Dev-Realtime-Toon-Mix",
1945
+ "weights": "toon-mix.safetensors",
1946
+ "trigger_word": "toon mix"
1947
+ },
1948
+ #207
1949
+ {
1950
+ "image": "https://huggingface.co/oshtz/flux-pointcrayonstyle/resolve/main/images/pointcrayonstyle%20illustration%2C%20at%20a%20lighthouse%2C%20the%20ambiance%20is%20exotic%20and%20mysterious.png",
1951
+ "title": "Pointcrayonstyle",
1952
+ "repo": "oshtz/flux-pointcrayonstyle",
1953
+ "weights": "flux-pointcrayonstyle.safetensors",
1954
+ "trigger_word": "pointcrayonstyle"
1955
+ },
1956
+ #208
1957
+ {
1958
+ "image": "https://huggingface.co/Purz/vhs-box/resolve/main/33727059.jpeg",
1959
+ "title": "VSH Box",
1960
+ "repo": "Purz/vhs-box",
1961
+ "weights": "purz-vhs_box.safetensors",
1962
+ "trigger_word": "vhs_box"
1963
+ },
1964
+ #209
1965
+ {
1966
+ "image": "https://huggingface.co/nerijs/flux_prettyshot_v1/resolve/main/images/image_5.png",
1967
+ "title": "Prettyshot",
1968
+ "repo": "nerijs/flux_prettyshot_v1",
1969
+ "weights": "flux_prettyshot_v1.safetensors",
1970
+ "trigger_word": "pr3ttysh0t"
1971
+ },
1972
+ #210
1973
+ {
1974
+ "image": "https://huggingface.co/glif-loradex-trainer/insectagon_pipo_hippo1/resolve/main/samples/1729839793051__000001500_1.jpg",
1975
+ "title": "Insectagon pipo",
1976
+ "repo": "glif-loradex-trainer/insectagon_pipo_hippo1",
1977
+ "weights": "pipo_hippo1.safetensors",
1978
+ "trigger_word": "pipo_meme"
1979
+ },
1980
+ #211
1981
+ {
1982
+ "image": "https://huggingface.co/prithivMLmods/Flux-Polaroid-Plus/resolve/main/images/P1.png",
1983
+ "title": "Polaroid Plus",
1984
+ "repo": "prithivMLmods/Flux-Polaroid-Plus",
1985
+ "weights": "polaroid-plus.safetensors",
1986
+ "trigger_word": "Polaroid Collage"
1987
+ },
1988
+ #212
1989
+ {
1990
+ "image": "https://huggingface.co/prithivMLmods/Flux-Product-Ad-Backdrop/resolve/main/images/PA1.png",
1991
+ "title": "Product Ad",
1992
+ "repo": "prithivMLmods/Flux-Product-Ad-Backdrop",
1993
+ "weights": "Prod-Ad.safetensors",
1994
+ "trigger_word": "Product Ad"
1995
+ },
1996
+ #213
1997
+ {
1998
+ "image": "https://huggingface.co/prithivMLmods/Flux-Art-Nightmare-99/resolve/main/images/NM4.png",
1999
+ "title": "Nightmare 99",
2000
+ "repo": "prithivMLmods/Flux-Art-Nightmare-99",
2001
+ "weights": "nm99.safetensors",
2002
+ "trigger_word": "nm99"
2003
+ },
2004
+ #214
2005
+ {
2006
+ "image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Frosted-Container-LoRA/resolve/main/images/FG1.png",
2007
+ "title": "Frosted Container",
2008
+ "repo": "prithivMLmods/Flux.1-Dev-Frosted-Container-LoRA",
2009
+ "weights": "frosted-gc.safetensors",
2010
+ "trigger_word": "frosted GC"
2011
+ },
2012
+ #215
2013
+ {
2014
+ "image": "https://huggingface.co/glif-loradex-trainer/swap_magenta_kuki_roblox/resolve/main/samples/1731068408259__000001500_4.jpg",
2015
+ "title": "Magenta Kuki Roblox",
2016
+ "repo": "glif-loradex-trainer/swap_magenta_kuki_roblox",
2017
+ "weights": "magenta_kuki_roblox.safetensors",
2018
+ "trigger_word": "kuki_magenta, roblox"
2019
+ },
2020
+ #216
2021
+ {
2022
+ "image": "https://huggingface.co/glif-loradex-trainer/maxxd4240_PleinAir/resolve/main/samples/1730493095161__000003000_4.jpg",
2023
+ "title": "Plein Air",
2024
+ "repo": "glif-loradex-trainer/maxxd4240_PleinAir",
2025
+ "weights": "PleinAir.safetensors",
2026
+ "trigger_word": "P1e!n"
2027
+ },
2028
+ #217
2029
+ {
2030
+ "image": "https://huggingface.co/prithivMLmods/Flux-GArt-LoRA/resolve/main/images/G2.png",
2031
+ "title": "GArt",
2032
+ "repo": "prithivMLmods/Flux-GArt-LoRA",
2033
+ "weights": "GArt.safetensors",
2034
+ "trigger_word": "GArt"
2035
+ },
2036
+ #218
2037
+ {
2038
+ "image": "https://huggingface.co/strangerzonehf/Flux-Super-Capybara-HF/resolve/main/images/C2.png",
2039
+ "title": "Capybara HF",
2040
+ "repo": "strangerzonehf/Flux-Super-Capybara-HF",
2041
+ "weights": "capybara-hf.safetensors",
2042
+ "trigger_word": "capybara hf"
2043
+ },
2044
+ #219
2045
+ {
2046
+ "image": "https://huggingface.co/prithivMLmods/Flux-Fine-Detail-LoRA/resolve/main/images/SR1.png",
2047
+ "title": "Fine Detail",
2048
+ "repo": "prithivMLmods/Flux-Fine-Detail-LoRA",
2049
+ "weights": "Fine-Detail.safetensors",
2050
+ "trigger_word": "Super Detail"
2051
+ },
2052
+ #220
2053
+ {
2054
+ "image": "https://huggingface.co/gokaygokay/Flux-Digital-Backgrounds-LoRA/resolve/main/images/image1.jpg",
2055
+ "title": "Digital Backgrounds",
2056
+ "repo": "gokaygokay/Flux-Digital-Backgrounds-LoRA",
2057
+ "weights": "digital_background_lora.safetensors",
2058
+ "trigger_word": "dgtlbg"
2059
+ },
2060
+ #221
2061
+ {
2062
+ "image": "https://huggingface.co/gokaygokay/Flux-Realistic-Backgrounds-LoRA/resolve/main/images/image1.jpg",
2063
+ "title": "Realistic Backgrounds",
2064
+ "repo": "gokaygokay/Flux-Realistic-Backgrounds-LoRA",
2065
+ "weights": "realistic_background_lora.safetensors",
2066
+ "trigger_word": "rlstcbg"
2067
+ },
2068
+ #222
2069
+ {
2070
+ "image": "https://huggingface.co/prithivMLmods/Flux-Lego-Ref-LoRA/resolve/main/images/2.png",
2071
+ "title": "LEGO",
2072
+ "repo": "prithivMLmods/Flux-Lego-Ref-LoRA",
2073
+ "weights": "Lego.safetensors",
2074
+ "trigger_word": "lego --fref --89890"
2075
+ },
2076
+ #223
2077
+ {
2078
+ "image": "https://huggingface.co/strangerzonehf/Flux-3DXL-Partfile-0002/resolve/main/images/44.png",
2079
+ "title": "3DXLP2",
2080
+ "repo": "strangerzonehf/Flux-3DXL-Partfile-0002",
2081
+ "weights": "3DXLP2.safetensors",
2082
+ "trigger_word": "3DXLP2"
2083
+ },
2084
+
2085
+ #add new
2086
  ]
2087
 
2088
  #--------------------------------------------------Model Initialization-----------------------------------------------------------------------------------------#
 
2148
  height,
2149
  )
2150
 
2151
+ @spaces.GPU(duration=120)
2152
  def generate_image(prompt_mash, steps, seed, cfg_scale, width, height, lora_scale, progress):
2153
  pipe.to("cuda")
2154
  generator = torch.Generator(device="cuda").manual_seed(seed)
 
2185
  ).images[0]
2186
  return final_image
2187
 
2188
+ @spaces.GPU(duration=120)
2189
  def run_lora(prompt, image_input, image_strength, cfg_scale, steps, selected_index, randomize_seed, seed, width, height, lora_scale, progress=gr.Progress(track_tqdm=True)):
2190
  if selected_index is None:
2191
+ raise gr.Error("You must select a LoRA before proceeding.🧨")
2192
  selected_lora = loras[selected_index]
2193
  lora_path = selected_lora["repo"]
2194
  trigger_word = selected_lora["trigger_word"]
 
2246
  base_model = model_card.data.get("base_model")
2247
  print(base_model)
2248
 
2249
+ #Allows Both
2250
  if((base_model != "black-forest-labs/FLUX.1-dev") and (base_model != "black-forest-labs/FLUX.1-schnell")):
2251
  raise Exception("Flux LoRA Not Found!")
2252
+
2253
  # Only allow "black-forest-labs/FLUX.1-dev"
2254
  #if base_model != "black-forest-labs/FLUX.1-dev":
2255
  #raise Exception("Only FLUX.1-dev is supported, other LoRA models are not allowed!")
 
2323
 
2324
  run_lora.zerogpu = True
2325
 
2326
+ title = "Hex Game Maker"
2327
+ with gr.Blocks(css_paths="style_20250128.css", title=title, theme='Surn/beeuty', delete_cache=(240, 240)) as app:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2328
  title = gr.HTML(
2329
+ """<h1>Hex Game Maker🥳</h1>""",
2330
  elem_id="title",
2331
  )
2332
  selected_index = gr.State(None)
2333
  with gr.Row():
2334
  with gr.Column(scale=3):
2335
+ prompt = gr.Textbox(label="Prompt", lines=1, placeholder=":/ choose the LoRA and type the prompt ")
2336
  with gr.Column(scale=1, elem_id="gen_column"):
2337
  generate_button = gr.Button("Generate", variant="primary", elem_id="gen_btn")
2338
  with gr.Row():
 
2373
  randomize_seed = gr.Checkbox(True, label="Randomize seed")
2374
  seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, randomize=True)
2375
  lora_scale = gr.Slider(label="LoRA Scale", minimum=0, maximum=3, step=0.01, value=0.95)
2376
+ with gr.Row():
2377
+ gr.HTML(value=versions_html(), visible=True, elem_id="versions")
2378
 
2379
  gallery.select(
2380
  update_selection,
 
2398
  )
2399
 
2400
  app.queue()
2401
+ app.launch(allowed_paths=["assets","/","./assets","images","./images", "./images/prerendered"], favicon_path="./assets/favicon.ico", max_file_size="10mb")
assets/Beeuty-1.png ADDED

Git LFS Details

  • SHA256: dcbdf86a6fa83c946faef88dbe50f6a407a76c46a05bb8bd167efdf259defdf4
  • Pointer size: 130 Bytes
  • Size of remote file: 11.7 kB
assets/examples/favicon.ico ADDED
assets/examples/hex_flower_logo.png ADDED

Git LFS Details

  • SHA256: 194da4767df0420e49466a7a882b18d903458468e68c7361877129eabe514f0f
  • Pointer size: 131 Bytes
  • Size of remote file: 268 kB
assets/examples/hex_map_p1.png ADDED

Git LFS Details

  • SHA256: b4952dd6e7e68a9e33606bc50a2499d290c962a54fbeadde240f442f168210db
  • Pointer size: 132 Bytes
  • Size of remote file: 1.27 MB
assets/examples/hex_map_p1_overlayed.png ADDED

Git LFS Details

  • SHA256: b4809a05046feca8397dbaa7182edbd9e367c4c74f5e14daaee37a0acdbc5d79
  • Pointer size: 131 Bytes
  • Size of remote file: 327 kB
assets/examples/hexed_fract_1.png ADDED

Git LFS Details

  • SHA256: 84f0942363baccd043ddbf1741a28224817a2d9093589f4b9458bc2635963989
  • Pointer size: 132 Bytes
  • Size of remote file: 2.49 MB
assets/examples/tmpzt3mblvk.png ADDED

Git LFS Details

  • SHA256: d2cac66bd5906b6c9ddaa757f6fb2ab68d91cbd1bfeef8098077d1cd358f7d5f
  • Pointer size: 132 Bytes
  • Size of remote file: 6.28 MB
assets/favicon.ico ADDED
images/Beeuty-1.png ADDED

Git LFS Details

  • SHA256: dcbdf86a6fa83c946faef88dbe50f6a407a76c46a05bb8bd167efdf259defdf4
  • Pointer size: 130 Bytes
  • Size of remote file: 11.7 kB
images/logo.png ADDED

Git LFS Details

  • SHA256: 9ab282f8e7e1652261126eb9272f5e73871d2ce91f95ce9f2f5aa60d890b3dd8
  • Pointer size: 130 Bytes
  • Size of remote file: 32.2 kB
images/logo_hex.png ADDED

Git LFS Details

  • SHA256: 9c0f91c488296e7234f829effe6da9d997704fa9b4e95739af7049d8d91db72b
  • Pointer size: 131 Bytes
  • Size of remote file: 547 kB
images/prerendered/elevated_peninsula_1.png ADDED

Git LFS Details

  • SHA256: 39133cbea35fd2d380a3bb75cf6108be7406c88eceec70e1a9153087471f7272
  • Pointer size: 131 Bytes
  • Size of remote file: 654 kB
images/prerendered/grid_1.png ADDED

Git LFS Details

  • SHA256: 354142bba2c133d7ac085a511a2fdbb80b42b15a601870a38e919a89139f082a
  • Pointer size: 131 Bytes
  • Size of remote file: 219 kB
images/prerendered/hex_grass_dirty.png ADDED

Git LFS Details

  • SHA256: 2c1a5040330f9137a79ce8949871f190b97a6d933215ac1aa0a74aa153d214e3
  • Pointer size: 131 Bytes
  • Size of remote file: 228 kB
images/prerendered/hex_mixed_elevations_battlefield_1.png ADDED

Git LFS Details

  • SHA256: 211c5eb35d721350e15993fc8638e4d5a8bcd3633124991eccf34ba372cada6f
  • Pointer size: 131 Bytes
  • Size of remote file: 858 kB
images/prerendered/hex_mixed_elevations_battlefield_2.png ADDED

Git LFS Details

  • SHA256: 549a90927402112a423dc0df1ce80fda1b159c014bf7ef387a7bd708ba72d9eb
  • Pointer size: 131 Bytes
  • Size of remote file: 870 kB
images/prerendered/oasis_mixed_elevations_1.png ADDED

Git LFS Details

  • SHA256: 75c554a98882fda122f35205708a9218f51bce30357c4bc041024a96f6d7ecdb
  • Pointer size: 131 Bytes
  • Size of remote file: 482 kB
images/prerendered/pic526383.png ADDED

Git LFS Details

  • SHA256: 6489030d3075a633ac4365cdf74b1ed0e277f34cb5560ea60207a05771661df2
  • Pointer size: 131 Bytes
  • Size of remote file: 414 kB
images/prerendered/roadway_1.png ADDED

Git LFS Details

  • SHA256: 0e45661bfdad452c3e609548f1b063d4957cece8c39242a436fe733b7d040df5
  • Pointer size: 131 Bytes
  • Size of remote file: 445 kB
modules/color_utils.py ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # modules/color_utils.py
2
+
3
+ from PIL import Image, ImageColor
4
+ import re
5
+ import cairocffi as cairo
6
+ import pangocffi
7
+ import pangocairocffi
8
+
9
+
10
+ def multiply_and_clamp(value, scale, min_value=0, max_value=255):
11
+ return min(max(value * scale, min_value), max_value)
12
+
13
+ # Convert decimal color to hexadecimal color (rgb or rgba)
14
+ def rgb_to_hex(rgb):
15
+ color = "#"
16
+ for i in rgb:
17
+ num = int(i)
18
+ color += str(hex(num))[-2:].replace("x", "0").upper()
19
+ return color
20
+
21
+ def parse_hex_color(hex_color, base = 1):
22
+ """
23
+ This function is set to pass the color in (1.0,1.0, 1.0, 1.0) format.
24
+ Change base to 255 to get the color in (255, 255, 255, 255) format.
25
+ Parses a hex color string or tuple into RGBA components.
26
+ Parses color values specified in various formats and convert them into normalized RGBA components
27
+ suitable for use in color calculations, rendering, or manipulation.
28
+
29
+ Supports:
30
+ - #RRGGBBAA
31
+ - #RRGGBB (assumes full opacity)
32
+ - (r, g, b, a) tuple
33
+ """
34
+ if isinstance(hex_color, tuple):
35
+ if len(hex_color) == 4:
36
+ r, g, b, a = hex_color
37
+ elif len(hex_color) == 3:
38
+ r, g, b = hex_color
39
+ a = 1.0 # Full opacity
40
+ else:
41
+ raise ValueError("Tuple must be in the format (r, g, b) or (r, g, b, a)")
42
+ return r / 255.0, g / 255.0, b / 255.0, a / 255.0 if a <= 1 else a
43
+
44
+ if hex_color.startswith("#"):
45
+ if len(hex_color) == 6:
46
+ r = int(hex_color[0:2], 16) / 255.0
47
+ g = int(hex_color[2:4], 16) / 255.0
48
+ b = int(hex_color[4:6], 16) / 255.0
49
+ a = 1.0 # Full opacity
50
+ elif len(hex_color) == 8:
51
+ r = int(hex_color[0:2], 16) / 255.0
52
+ g = int(hex_color[2:4], 16) / 255.0
53
+ b = int(hex_color[4:6], 16) / 255.0
54
+ a = int(hex_color[6:8], 16) / 255.0
55
+ else:
56
+ try:
57
+ r, g, b, a = ImageColor.getcolor(hex_color, "RGBA")
58
+ r = r / 255
59
+ g = g / 255
60
+ b = b / 255
61
+ a = a / 255
62
+ except:
63
+ raise ValueError("Hex color must be in the format RRGGBB, RRGGBBAA, ( r, g, b, a) or a common color name")
64
+ return multiply_and_clamp(r,base, max_value= base), multiply_and_clamp(g, base, max_value= base), multiply_and_clamp(b , base, max_value= base), multiply_and_clamp(a , base, max_value= base)
65
+
66
+ # Define a function to convert a hexadecimal color code to an RGB(A) tuple
67
+ def hex_to_rgb(hex):
68
+ if hex.startswith("#"):
69
+ clean_hex = hex.replace('#','')
70
+ # Use a generator expression to convert pairs of hexadecimal digits to integers and create a tuple
71
+ return tuple(int(clean_hex[i:i+2], 16) for i in range(0, len(clean_hex),2))
72
+ else:
73
+ return detect_color_format(hex)
74
+
75
+ def detect_color_format(color):
76
+ """
77
+ Detects if the color is in RGB, RGBA, or hex format,
78
+ and converts it to an RGBA tuple with integer components.
79
+
80
+ Args:
81
+ color (str or tuple): The color to detect.
82
+
83
+ Returns:
84
+ tuple: The color in RGBA format as a tuple of 4 integers.
85
+
86
+ Raises:
87
+ ValueError: If the input color is not in a recognized format.
88
+ """
89
+ # Handle color as a tuple of floats or integers
90
+ if isinstance(color, tuple):
91
+ if len(color) == 3 or len(color) == 4:
92
+ # Ensure all components are numbers
93
+ if all(isinstance(c, (int, float)) for c in color):
94
+ r, g, b = color[:3]
95
+ a = color[3] if len(color) == 4 else 255
96
+ return (
97
+ max(0, min(255, int(round(r)))),
98
+ max(0, min(255, int(round(g)))),
99
+ max(0, min(255, int(round(b)))),
100
+ max(0, min(255, int(round(a * 255)) if a <= 1 else round(a))),
101
+ )
102
+ else:
103
+ raise ValueError(f"Invalid color tuple length: {len(color)}")
104
+ # Handle hex color codes
105
+ if isinstance(color, str):
106
+ color = color.strip()
107
+ # Try to use PIL's ImageColor
108
+ try:
109
+ rgba = ImageColor.getcolor(color, "RGBA")
110
+ return rgba
111
+ except ValueError:
112
+ pass
113
+ # Handle 'rgba(r, g, b, a)' string format
114
+ rgba_match = re.match(r'rgba\(\s*([0-9.]+),\s*([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\s*\)', color)
115
+ if rgba_match:
116
+ r, g, b, a = map(float, rgba_match.groups())
117
+ return (
118
+ max(0, min(255, int(round(r)))),
119
+ max(0, min(255, int(round(g)))),
120
+ max(0, min(255, int(round(b)))),
121
+ max(0, min(255, int(round(a * 255)) if a <= 1 else round(a))),
122
+ )
123
+ # Handle 'rgb(r, g, b)' string format
124
+ rgb_match = re.match(r'rgb\(\s*([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\s*\)', color)
125
+ if rgb_match:
126
+ r, g, b = map(float, rgb_match.groups())
127
+ return (
128
+ max(0, min(255, int(round(r)))),
129
+ max(0, min(255, int(round(g)))),
130
+ max(0, min(255, int(round(b)))),
131
+ 255,
132
+ )
133
+
134
+ # If none of the above conversions work, raise an error
135
+ raise ValueError(f"Invalid color format: {color}")
136
+
137
+
138
+ def update_color_opacity(color, opacity):
139
+ """
140
+ Updates the opacity of a color value.
141
+
142
+ Parameters:
143
+ color (tuple): A color represented as an RGB or RGBA tuple.
144
+ opacity (int): An integer between 0 and 255 representing the desired opacity.
145
+
146
+ Returns:
147
+ tuple: The color as an RGBA tuple with the updated opacity.
148
+ """
149
+ # Ensure opacity is within the valid range
150
+ opacity = max(0, min(255, int(opacity)))
151
+
152
+ if len(color) == 3:
153
+ # Color is RGB, add the opacity to make it RGBA
154
+ return color + (opacity,)
155
+ elif len(color) == 4:
156
+ # Color is RGBA, replace the alpha value with the new opacity
157
+ return color[:3] + (opacity,)
158
+ else:
159
+ raise ValueError(f"Invalid color format: {color}. Must be an RGB or RGBA tuple.")
160
+
161
+ def draw_text_with_emojis(image, text, font_color, offset_x, offset_y, font_name, font_size):
162
+ """
163
+ Draws text with emojis directly onto the given PIL image at specified coordinates with the specified color.
164
+ Parameters:
165
+ image (PIL.Image.Image): The RGBA image to draw on.
166
+ text (str): The text to draw, including emojis.
167
+ font_color (tuple): RGBA color tuple for the text (e.g., (255, 0, 0, 255)).
168
+ offset_x (int): The x-coordinate for the text center position.
169
+ offset_y (int): The y-coordinate for the text center position.
170
+ font_name (str): The name of the font family.
171
+ font_size (int): Size of the font.
172
+ Returns:
173
+ None: The function modifies the image in place.
174
+ """
175
+ if image.mode != 'RGBA':
176
+ raise ValueError("Image must be in RGBA mode.")
177
+ # Convert PIL image to a mutable bytearray
178
+ img_data = bytearray(image.tobytes("raw", "BGRA"))
179
+ # Create a Cairo ImageSurface that wraps the image's data
180
+ surface = cairo.ImageSurface.create_for_data(
181
+ img_data,
182
+ cairo.FORMAT_ARGB32,
183
+ image.width,
184
+ image.height,
185
+ image.width * 4
186
+ )
187
+ context = cairo.Context(surface)
188
+ # Create Pango layout
189
+ layout = pangocairocffi.create_layout(context)
190
+ layout._set_text(text)
191
+ # Set font description
192
+ desc = pangocffi.FontDescription()
193
+ desc._set_family(font_name)
194
+ desc._set_size(pangocffi.units_from_double(font_size))
195
+ layout._set_font_description(desc)
196
+ # Set text color
197
+ r, g, b, a = parse_hex_color(font_color)
198
+ context.set_source_rgba(r , g , b , a )
199
+ # Move to the position (top-left corner adjusted to center the text)
200
+ context.move_to(offset_x, offset_y)
201
+ # Render the text
202
+ pangocairocffi.show_layout(context, layout)
203
+ # Flush the surface to ensure all drawing operations are complete
204
+ surface.flush()
205
+ # Convert the modified bytearray back to a PIL Image
206
+ modified_image = Image.frombuffer(
207
+ "RGBA",
208
+ (image.width, image.height),
209
+ bytes(img_data),
210
+ "raw",
211
+ "BGRA", # Cairo stores data in BGRA order
212
+ surface.get_stride(),
213
+ ).convert("RGBA")
214
+ return modified_image
modules/constants.py ADDED
@@ -0,0 +1,359 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # modules/constants.py
2
+ # constants.py contains all the constants used in the project such as the default LUT example image, prompts, negative prompts, pre-rendered maps, models, LoRA weights, and more.
3
+ # execptions made for some environmental variables
4
+ import os
5
+ from pathlib import Path
6
+ from dotenv import load_dotenv
7
+ import numpy as np
8
+
9
+ #Set the environment variables
10
+ #os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:256,expandable_segments:True"
11
+ #os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
12
+ #os.environ["TF_CPP_MIN_LOG_LEVEL"] = '2'
13
+ #os.environ['CUDA_MODULE_LOADING']='LAZY'
14
+ #os.environ['USE_FLASH_ATTENTION'] = '1'
15
+ #os.environ['XFORMERS_FORCE_DISABLE_TRITON']= '1'
16
+ #os.environ['XFORMERS_FORCE_DISABLE_TORCHSCRIPT']= '1'
17
+ #os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
18
+ #os.environ["PYTORCH_NVML_BASED_CUDA_CHECK"] = "1"
19
+ #os.environ["CUDA_VISIBLE_DEVICES"] = "0"
20
+ #os.environ["NVIDIA_VISIBLE_DEVICES"] = "0"
21
+ #os.environ["ZEROGPU_VERSION"] = "2"
22
+ #os.environ["ZEROGPU_V2"] = "true"
23
+ #os.environ["ZERO_GPU_V2"] = "true"
24
+ #os.environ["ZERO_GPU_PATCH_TORCH_DEVICE"]='1'
25
+
26
+ IS_SHARED_SPACE = "Surn/HexGameMaker" in os.environ.get('SPACE_ID', '')
27
+
28
+ # Load environment variables from .env file
29
+ dotenv_path = Path(__file__).parent.parent / '.env'
30
+ load_dotenv(dotenv_path)
31
+
32
+ # Set the temporary folder location
33
+ #os.environ['TEMP'] = r'e:\\TMP'
34
+ #os.environ['TMPDIR'] = r'e:\\TMP'
35
+ #os.environ['XDG_CACHE_HOME'] = r'E:\\cache'
36
+
37
+ HF_API_TOKEN = os.getenv("HF_TOKEN")
38
+ if not HF_API_TOKEN:
39
+ raise ValueError("HF_TOKEN is not set. Please check your .env file.")
40
+
41
+ default_lut_example_img = "./LUT/daisy.jpg"
42
+ MAX_SEED = np.iinfo(np.int32).max
43
+
44
+ PROMPTS = {
45
+ "BorderBlack": "Top-down view of a hexagon-based alien map with black borders. Features rivers, mountains, volcanoes, and snow at top and bottom. Colors: light blue, green, tan, brown. No reflections or shadows. Partial hexes on edges are black.",
46
+ "Earth": "Top-down view of a hexagonal world map with rivers, mountains, volcanoes, and snow at top and bottom. Colors: light blue, green, tan, brown. No reflections or shadows. Partial edge hexes are black. Overhead view.",
47
+ "Map3": "Top-down view of a mystic forest map with lakes, dense forests, magical flora, and hex grids. Designed for tabletop gaming with clarity and strategic elements. Colors: light blue, green, purple, brown. Partial hexes on edges are black.",
48
+ "Map4": "Top-down view of a medieval battlefield map with lakes, forests, magical fauna, and hex grids. Emphasizes clarity and strategy for tabletop games. Colors: teal, dark green, violet, brown. Partial edge hexes are black. Viewed from above.",
49
+ "Alien Landscape": "Top-down view of a barren alien world map made from hexagon pieces. Features light blue rivers, brown mountains, red volcanoes, and white snow at top and bottom. Colors: light blue, green, tan, brown. Partial hexes on edges are black.",
50
+ "Alien World": "Top-down view of an alien world map built from hexagon pieces. Includes rivers, mountains, volcanoes, and snowy areas. Colors: light blue, green, tan, brown. Partial edge hexes are black. Overhead view.",
51
+ "Mystic Forest": "Top-down view of a mystic forest map with lakes, dense forests, magical flora, and hex grids. Designed for clarity in tabletop gaming. Colors: light blue, green, purple, brown. Partial hexes on edges are black.",
52
+ "Medieval Battlefield": "Top-down view of a medieval battlefield map featuring lakes, forests, and magic fauna. Emphasizes clarity and strategy for tabletop games. Colors: teal, dark green, violet, brown. Partial edge hexes are black. Viewed from above.",
53
+ "Prompt": None # Indicates that the prompt should be taken from prompt_textbox
54
+ }
55
+
56
+ NEGATIVE_PROMPTS = {
57
+ "BorderBlack": "humans, modern_buildings, vehicles, text, logos, reflections, shadows, realistic map of the Earth, isometric",
58
+ "Earth": "humans, modern_buildings, vehicles, text, logos, reflections, shadows, missing realistic map of the Earth, isometric",
59
+ "Map3": "humans, modern_buildings, vehicles, text, logos, reflections, shadows, realistic map of the Earth, isometric",
60
+ "Map4": "humans, modern_buildings, vehicles, text, logos, reflections, shadows, realistic map of the Earth, isometric",
61
+ "Alien Landscape": "humans, modern_buildings, vehicles, text, logos, reflections, shadows, realistic map of the Earth, isometric",
62
+ "Alien World": "Earth, humans, modern_buildings, vehicles, text, logos, reflections, shadows, realistic map of the Earth, isometric",
63
+ "Mystic Forest": "humans, modern_buildings, vehicles, text, logos, reflections, shadows, realistic map of the Earth, isometric",
64
+ "Medieval Battlefield": "humans, modern_buildings, vehicles, text, logos, reflections, shadows, realistic map of the Earth, isometric",
65
+ "Prompt": None # Indicates that the negative prompt should be taken from negative_prompt_textbox
66
+ }
67
+
68
+ # Directory containing the pre-rendered hexagon maps
69
+ ASSETS_DIR = "images/prerendered"
70
+
71
+ # List of pre-rendered hexagon map files
72
+ PRE_RENDERED_MAPS = [
73
+ "alien_orb_land_1.png",
74
+ "alien_prarie_1.png",
75
+ "alien_world_1.png",
76
+ "alien_world_2.png",
77
+ "alien_world_3.png",
78
+ "alien_world_4.png",
79
+ "alien_world_5.png",
80
+ "canyon_water_1.png",
81
+ "CONQ_Caustic_Valley.png",
82
+ "CONQ_Frozen_City.png",
83
+ "CONQ_Hellebore_Springs.png",
84
+ "CONQ_Terra_Therma.png",
85
+ "CONQ_Viridian_Bog.png",
86
+ "dark_dirt_elevations_1.png",
87
+ "elevated_peninsula_1.png",
88
+ "Firefly_alien_canyons_1.png",
89
+ "Firefly_alien_canyons_2.png",
90
+ "Firefly_alien_canyons_2.png",
91
+ "Firefly_alien_dry_canyons_1.png",
92
+ "Firefly_alien_dry_canyons_2.png",
93
+ "Firefly_alien_map_1.png",
94
+ "Firefly_hpg_terrain_1.png",
95
+ "Firefly_hpg_terrain_2.png",
96
+ "Firefly_river_dry_1.png",
97
+ "Firefly_river_running_1.png",
98
+ "Firefly_topographical_alien_desert_1.png",
99
+ "Firefly_topographical_canyon_1.png",
100
+ "Firefly_topographical_height_map_1.png",
101
+ "Firefly_topographical_height_map_2.png",
102
+ "Firefly_topographical_height_map_3.png",
103
+ "Firefly_topographical_height_map_5.png",
104
+ "Firefly_topographical_height_map_6.png",
105
+ "Firefly_topographical_marble_1.png",
106
+ "Firefly_topographical_moon_1.png",
107
+ "green_farming alien_world_1.png",
108
+ "green_farming alien_world_2.png",
109
+ "grey_barren_alien_world_1.png",
110
+ "grey_barren_alien_world_2.png",
111
+ "grey_barren_alien_world_3.png",
112
+ "grey_barren_alien_world_4.png",
113
+ "grey_barren_alien_world_5.png",
114
+ "grey_barren_alien_world_6.png",
115
+ "grey_barren_alien_world_7.png",
116
+ "grey_waterless_alien_world_map.png",
117
+ "grid_1.png",
118
+ "Hex_gen_map.PNG",
119
+ "hex_grass_dirty.png",
120
+ "hex_military_industrial alien_world_map.png",
121
+ "hex_mixed_elevations_battlefield_1.png",
122
+ "hex_mixed_elevations_battlefield_2.png",
123
+ "mixed_elevations_battlefield_3.png",
124
+ "n6W9Hc.png",
125
+ "oasis_mixed_elevations_1.png",
126
+ "pic526383.png",
127
+ "red_volcanic_alien_1.png",
128
+ "red_volcanic_alien_2.png",
129
+ "red_volcanic_alien_3.png",
130
+ "red_volcanic_alien_4.png",
131
+ "roadway_1.png",
132
+ "snowy_rolling_hills_1.png",
133
+ "volcanic alien_world_map.png",
134
+ "war-torn_post-apocalyptic_alien_world_map.png"
135
+ ]
136
+
137
+ # Create full paths for pre-rendered maps
138
+ pre_rendered_maps_paths = [os.path.join(ASSETS_DIR, map_file).replace("\\", "/") for map_file in PRE_RENDERED_MAPS]
139
+ pre_rendered_maps_paths_api_file = [f"./gradio_api/file={map_path}" for map_path in pre_rendered_maps_paths]
140
+
141
+ # Generate a dictionary with cleaned-up names as keys and file paths as values
142
+ PRE_RENDERED_MAPS_JSON = {
143
+ os.path.splitext(file.replace("_", " ").replace("-", " ").replace(" ", " ").strip())[0]: os.path.join(ASSETS_DIR, file)
144
+ for file in PRE_RENDERED_MAPS
145
+ }
146
+
147
+ PRE_RENDERED_MAPS_JSON = "{'alien world 1': 'images/prerendered/alien_world_1.jpg', 'alien world 2': 'images/prerendered/alien_world_2.jpg', 'alien world 3': 'images/prerendered/alien_world_3.jpg', 'alien world 4': 'images/prerendered/alien_world_4.jpg', 'alien world 5': 'images/prerendered/alien_world_5.jpg', 'green farming alien world 1': 'images/prerendered/green_farming alien_world_1.jpg', 'green farming alien world 2': 'images/prerendered/green_farming alien_world_2.jpg', 'grey barren alien world 1': 'images/prerendered/grey_barren_alien_world_1.jpg', 'grey barren alien world 2': 'images/prerendered/grey_barren_alien_world_2.jpg', 'grey barren alien world 3': 'images/prerendered/grey_barren_alien_world_3.jpg', 'grey barren alien world 4': 'images/prerendered/grey_barren_alien_world_4.jpg', 'grey barren alien world 5': 'images/prerendered/grey_barren_alien_world_5.jpg', 'grey barren alien world 6': 'images/prerendered/grey_barren_alien_world_6.jpg', 'grey barren alien world 7': 'images/prerendered/grey_barren_alien_world_7.jpg', 'grey waterless alien world map': 'images/prerendered/grey_waterless_alien_world_map.jpg', 'Hex gen map': 'images/prerendered/Hex_gen_map.PNG', 'military industrial alien world map': 'images/prerendered/military_industrial alien_world_map.jpg', 'red volcanic alien 1': 'images/prerendered/red_volcanic_alien_1.jpg', 'red volcanic alien 2': 'images/prerendered/red_volcanic_alien_2.jpg', 'red volcanic alien 3': 'images/prerendered/red_volcanic_alien_3.jpg', 'red volcanic alien 4': 'images/prerendered/red_volcanic_alien_4.jpg', 'volcanic alien world map': 'images/prerendered/volcanic alien_world_map.jpg', 'war torn post apocalyptic alien world map': 'images/prerendered/war-torn_post-apocalyptic_alien_world_map.jpg'}"
148
+ # Available FLUX model names
149
+ MODELS = [
150
+ "black-forest-labs/FLUX.1-schnell",
151
+ "black-forest-labs/FLUX.1-dev",
152
+ "ostris/Flex.1-alpha"
153
+ ]
154
+ # Available LoRA weights
155
+ LORA_WEIGHTS = [
156
+ "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design",
157
+ "Borcherding/FLUX.1-dev-LoRA-FractalLand-v0.1",
158
+ "Cossale/Frames2-Flex.1",
159
+ "XLabs-AI/flux-lora-collection/anime_lora.safetensors",
160
+ "XLabs-AI/flux-lora-collection/scenery_lora.safetensors",
161
+ "XLabs-AI/flux-lora-collection/disney_lora.safetensors",
162
+ "XLabs-AI/flux-RealismLora"
163
+ ]
164
+
165
+ # Map each LoRA weight to its corresponding model
166
+ LORA_TO_MODEL = {
167
+ "Yuanshi/OminiControl": "black-forest-labs/FLUX.1-schnell",
168
+ "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design": "black-forest-labs/FLUX.1-dev",
169
+ "Borcherding/FLUX.1-dev-LoRA-FractalLand-v0.1": "black-forest-labs/FLUX.1-dev",
170
+ "Cossale/Frames2-Flex.1": "ostris/Flex.1-alpha",
171
+ "AlekseyCalvin/HSTcolorFlexAlpha": "ostris/Flex.1-alpha",
172
+ "XLabs-AI/flux-lora-collection/anime_lora.safetensors":"black-forest-labs/FLUX.1-dev",
173
+ "XLabs-AI/flux-lora-collection/scenery_lora.safetensors":"black-forest-labs/FLUX.1-dev",
174
+ "XLabs-AI/flux-lora-collection/disney_lora.safetensors":"black-forest-labs/FLUX.1-dev",
175
+ "XLabs-AI/flux-RealismLora":"black-forest-labs/FLUX.1-dev"
176
+ }
177
+ condition_type = ["depth", "canny", "subject", "coloring", "deblurring", "fill", "redux"]
178
+ # Detailed LoRA weight configurations
179
+ LORA_DETAILS = {
180
+ "AlekseyCalvin/HSTcolorFlexAlpha" : [
181
+ {
182
+ "trigger_words": "(6kStepsCkpt) HST style autochrome photograph",
183
+ },
184
+ {
185
+ "weight_name": "HSToricColorFlex_6000steps_LoRAforFluxOrFlex_32dim64alpha.safetensors",
186
+ },
187
+ {
188
+ "notes": "You should use (6kStepsCkpt) HST style autochrome photograph as trigger words."
189
+ },
190
+ {
191
+ "parameters" :{
192
+ "num_inference_steps": "30"
193
+ }
194
+ }
195
+ ],
196
+ "XLabs-AI/flux-lora-collection/anime_lora.safetensors":[
197
+ {
198
+ "lora_collection": "XLabs-AI/flux-lora-collection",
199
+ "weight_name": "anime_lora.safetensors"
200
+ },
201
+ {
202
+ "trigger_words": "anime,",
203
+ },
204
+ {
205
+ "notes": "You should use ',anime' as trigger words at the end. @6min"
206
+ },
207
+ {
208
+ "parameters" :{
209
+ "num_inference_steps": "30"
210
+ }
211
+ }
212
+ ],
213
+ "XLabs-AI/flux-lora-collection/scenery_lora.safetensors":[
214
+ {
215
+ "lora_collection": "XLabs-AI/flux-lora-collection",
216
+ "weight_name": "scenery_lora.safetensors"
217
+ },
218
+ {
219
+ "trigger_words": "scenery style,",
220
+ },
221
+ {
222
+ "notes": "You should use ',scenery style' as trigger words at the end. @6min"
223
+ },
224
+ {
225
+ "parameters" :{
226
+ "num_inference_steps": "30"
227
+ }
228
+ }
229
+ ],
230
+ "XLabs-AI/flux-lora-collection/disney_lora.safetensors":[
231
+ {
232
+ "lora_collection": "XLabs-AI/flux-lora-collection",
233
+ "weight_name": "disney_lora.safetensors"
234
+ },
235
+ {
236
+ "trigger_words": "disney style,",
237
+ },
238
+ {
239
+ "notes": "You should use ',disney style' as trigger words at the end. @12min "
240
+ },
241
+ {
242
+ "parameters" :{
243
+ "num_inference_steps": "30"
244
+ }
245
+ }
246
+ ],
247
+ "XLabs-AI/flux-RealismLora":[
248
+ {
249
+ "notes": "No trigger words but 8k, Animatrix illustration style, fantasy style, natural photo cinematic should all work @6min"
250
+ },
251
+ {
252
+ "parameters" :{
253
+ "guidance_scale": "3.2",
254
+ "num_inference_steps": "34",
255
+ "scale": "0.85"
256
+ }
257
+ }
258
+ ],
259
+ "Cossale/Frames2-Flex.1": [
260
+ {
261
+ "weight_name": "backdrops_v2.safetensors",
262
+ "adapter_name": "backdrops_v2"
263
+ },
264
+ {
265
+ "trigger_words": "FRM$",
266
+ },
267
+ {
268
+ "notes": "You should use FRM$ as trigger words. @1.5 minutes"
269
+ },
270
+ {
271
+ "parameters" :{
272
+ "num_inference_steps": "50"
273
+ }
274
+ }
275
+ ],
276
+ "Yuanshi/OminiControl": [
277
+ {
278
+ "weight_name": "omini/subject_512.safetensors",
279
+ "adapter_name": "subject_512"
280
+ },
281
+ {
282
+ "weight_name": "omini/subject_1024_beta.safetensors",
283
+ "adapter_name": "subject_1024"
284
+ },
285
+ {
286
+ "parameters" :{
287
+ "num_inference_steps": "8",
288
+ "guidance_scale": "0"
289
+ }
290
+ },
291
+ {
292
+ "notes": "Select an Image as a guide."
293
+ }
294
+ ],
295
+ "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design": [
296
+ {
297
+ "notes": "You should use wablogo, logo, Minimalist as trigger words.. @4.8min"
298
+ },
299
+ {
300
+ "trigger_words": "wablogo, logo, Minimalist ",
301
+ },
302
+ {
303
+ "pipe" :{
304
+ "fuse_lora": {"lora_scale":0.8}
305
+ }
306
+ },
307
+ {
308
+ "parameters" :{
309
+ "num_inference_steps": "38"
310
+ }
311
+ }
312
+ ],
313
+ "Borcherding/FLUX.1-dev-LoRA-FractalLand-v0.1": [
314
+ {
315
+ "notes": "Use fractalLand at the start of the prompts to activate the fractal elements. . @4.8min"
316
+ },
317
+ {
318
+ "trigger_words": "fractalLand ",
319
+ },
320
+ {
321
+ "parameters" :{
322
+ "max_sequence_length": "512",
323
+ "guidance_scale": "3.5",
324
+ "num_inference_steps": "38"
325
+ }
326
+ }
327
+ ]
328
+ }
329
+ # Read the contents of the LUT folder, output to a list
330
+ lut_folder = "./LUT"
331
+ lut_files = [os.path.join(lut_folder, f).replace("\\", "/") for f in os.listdir(lut_folder) if f.endswith(".cube")]
332
+
333
+ temp_files = []
334
+
335
+
336
+ cards = [
337
+ "2♥️", "3♥️", "4♥️", "5♥️", "6♥️", "7♥️", "8♥️", "9♥️", "10♥️", "J♥️", "Q♥️", "K♥️", "A♥️",
338
+ "2♦️", "3♦️", "4♦️", "5♦️", "6♦️", "7♦️", "8♦️", "9♦️", "10♦️", "J♦️", "Q♦️", "K♦️", "A♦️",
339
+ "2♣️", "3♣️", "4♣️", "5♣️", "6♣️", "7♣️", "8♣️", "9♣️", "10♣️", "J♣️", "Q♣️", "K♣️", "A♣️",
340
+ "2♠️", "3♠️", "4♠️", "5♠️", "6♠️", "7♠️", "8♠️", "9♠️", "10♠️", "J♠️", "Q♠️", "K♠️", "A♠️"
341
+ ]
342
+ cards_alternating = [
343
+ "2♥️", "3♥️", "4♥️", "5♥️", "6♥️", "7♥️", "8♥️", "9♥️", "10♥️", "J♥️", "Q♥️", "K♥️", "A♥️",
344
+ "2♣️", "3♣️", "4♣️", "5♣️", "6♣️", "7♣️", "8♣️", "9♣️", "10♣️", "J♣️", "Q♣️", "K♣️", "A♣️",
345
+ "2♦️", "3♦️", "4♦️", "5♦️", "6♦️", "7♦️", "8♦️", "9♦️", "10♦️", "J♦️", "Q♦️", "K♦️", "A♦️",
346
+ "2♠️", "3♠️", "4♠️", "5♠️", "6♠️", "7♠️", "8♠️", "9♠️", "10♠️", "J♠️", "Q♠️", "K♠️", "A♠️"
347
+ ]
348
+ card_colors = [
349
+ "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", # Hearts
350
+ "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", # Diamonds
351
+ "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", # Clubs
352
+ "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000" # Spades
353
+ ]
354
+ card_colors_alternating = [
355
+ "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", # Hearts
356
+ "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", # Clubs
357
+ "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", "#FF0000", # Diamonds
358
+ "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000" # Spades
359
+ ]
modules/image_utils.py ADDED
@@ -0,0 +1,687 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # modules/image_utils.py
2
+ import os
3
+ from io import BytesIO
4
+ import cairosvg
5
+ import base64
6
+ import numpy as np
7
+ #from decimal import ROUND_CEILING
8
+ from PIL import Image, ImageChops, ImageDraw, ImageEnhance, ImageFilter, ImageDraw, ImageOps, ImageMath
9
+ from typing import List, Union
10
+ #import numpy as np
11
+ #import math
12
+ from pathlib import Path
13
+ from modules.constants import default_lut_example_img
14
+ from modules.color_utils import (
15
+ detect_color_format,
16
+ update_color_opacity
17
+ )
18
+
19
+ def open_image(image_path):
20
+ """
21
+ Opens an image from a file path or URL, or decodes a DataURL string into an image.
22
+ Supports SVG and ICO by converting them to PNG.
23
+
24
+ Parameters:
25
+ image_path (str): The file path, URL, or DataURL string of the image to open.
26
+
27
+ Returns:
28
+ Image: A PIL Image object of the opened image.
29
+
30
+ Raises:
31
+ Exception: If there is an error opening the image.
32
+ """
33
+ import requests
34
+ try:
35
+ # Strip leading and trailing double quotation marks, if present
36
+ image_path = image_path.strip('"')
37
+ if image_path.startswith('http'):
38
+ response = requests.get(image_path)
39
+ if image_path.lower().endswith('.svg'):
40
+ png_data = cairosvg.svg2png(bytestring=response.content)
41
+ img = Image.open(BytesIO(png_data))
42
+ elif image_path.lower().endswith('.ico'):
43
+ img = Image.open(BytesIO(response.content)).convert('RGBA')
44
+ else:
45
+ img = Image.open(BytesIO(response.content))
46
+ elif image_path.startswith('data'):
47
+ encoded_data = image_path.split(',')[1]
48
+ decoded_data = base64.b64decode(encoded_data)
49
+ if image_path.lower().endswith('.svg'):
50
+ png_data = cairosvg.svg2png(bytestring=decoded_data)
51
+ img = Image.open(BytesIO(png_data))
52
+ elif image_path.lower().endswith('.ico'):
53
+ img = Image.open(BytesIO(decoded_data)).convert('RGBA')
54
+ else:
55
+ img = Image.open(BytesIO(decoded_data))
56
+ else:
57
+ if image_path.lower().endswith('.svg'):
58
+ png_data = cairosvg.svg2png(url=image_path)
59
+ img = Image.open(BytesIO(png_data))
60
+ elif image_path.lower().endswith('.ico'):
61
+ img = Image.open(image_path).convert('RGBA')
62
+ else:
63
+ img = Image.open(image_path)
64
+ except Exception as e:
65
+ raise Exception(f'Error opening image: {e}')
66
+ return img
67
+
68
+ def build_prerendered_images(images_list):
69
+ """
70
+ Opens a list of images from file paths, URLs, or DataURL strings.
71
+
72
+ Parameters:
73
+ images_list (list): A list of file paths, URLs, or DataURL strings of the images to open.
74
+
75
+ Returns:
76
+ list: A list of PIL Image objects of the opened images.
77
+ """
78
+ return [open_image(image) for image in images_list]
79
+
80
+ def build_encoded_images(images_list):
81
+ """
82
+ Encodes a list of images to base64 strings.
83
+
84
+ Parameters:
85
+ images_list (list): A list of file paths, URLs, DataURL strings, or PIL Image objects of the images to encode.
86
+
87
+ Returns:
88
+ list: A list of base64-encoded strings of the images.
89
+ """
90
+ return [image_to_base64(image) for image in images_list]
91
+
92
+ def image_to_base64(image):
93
+ """
94
+ Encodes an image to a base64 string.
95
+ Supports ICO files by converting them to PNG with RGBA channels.
96
+
97
+ Parameters:
98
+ image (str or PIL.Image.Image): The file path, URL, DataURL string, or PIL Image object of the image to encode.
99
+
100
+ Returns:
101
+ str: A base64-encoded string of the image.
102
+ """
103
+ buffered = BytesIO()
104
+ if isinstance(image, str):
105
+ image = open_image(image)
106
+ image.save(buffered, format="PNG")
107
+ return "data:image/png;base64," + base64.b64encode(buffered.getvalue()).decode()
108
+
109
+ def change_color(image, color, opacity=0.75):
110
+ """
111
+ Changes the color of an image by overlaying it with a specified color and opacity.
112
+
113
+ Parameters:
114
+ image (str or PIL.Image.Image): The file path, URL, DataURL string, or PIL Image object of the image to change.
115
+ color (str or tuple): The color to overlay on the image.
116
+ opacity (float): The opacity of the overlay color (0.0 to 1.0).
117
+
118
+ Returns:
119
+ PIL.Image.Image: The image with the color changed.
120
+ """
121
+ if type(image) is str:
122
+ image = open_image(image)
123
+ try:
124
+ # Convert the color to RGBA format
125
+ rgba_color = detect_color_format(color)
126
+ rgba_color = update_color_opacity(rgba_color, opacity)
127
+
128
+ # Convert the image to RGBA mode
129
+ image = image.convert("RGBA")
130
+
131
+ # Create a new image with the same size and mode
132
+ new_image = Image.new("RGBA", image.size, rgba_color)
133
+
134
+ # Composite the new image with the original image
135
+ result = Image.alpha_composite(image, new_image)
136
+ except Exception as e:
137
+ print(f"Error changing color: {e}")
138
+ return image
139
+ return result
140
+
141
+ def convert_str_to_int_or_zero(value):
142
+ """
143
+ Converts a string to an integer, or returns zero if the conversion fails.
144
+
145
+ Parameters:
146
+ value (str): The string to convert.
147
+
148
+ Returns:
149
+ int: The converted integer, or zero if the conversion fails.
150
+ """
151
+ try:
152
+ return int(value)
153
+ except ValueError:
154
+ return 0
155
+
156
+ def upscale_image(image, scale_factor):
157
+ """
158
+ Upscales an image by a given scale factor using the LANCZOS filter.
159
+
160
+ Parameters:
161
+ image (PIL.Image.Image): The input image to be upscaled.
162
+ scale_factor (float): The factor by which to upscale the image.
163
+
164
+ Returns:
165
+ PIL.Image.Image: The upscaled image.
166
+ """
167
+ # Calculate the new size
168
+ new_width = int(image.width * scale_factor)
169
+ new_height = int(image.height * scale_factor)
170
+
171
+ # Upscale the image using the LANCZOS filter
172
+ upscaled_image = image.resize((new_width, new_height), Image.LANCZOS)
173
+
174
+ return upscaled_image
175
+
176
+ def crop_and_resize_image(image, width, height):
177
+ """
178
+ Crops the image to a centered square and resizes it to the specified width and height.
179
+
180
+ Parameters:
181
+ image (PIL.Image.Image): The input image to be cropped and resized.
182
+ width (int): The desired width of the output image.
183
+ height (int): The desired height of the output image.
184
+
185
+ Returns:
186
+ PIL.Image.Image: The cropped and resized image.
187
+ """
188
+ # Get original dimensions
189
+ original_width, original_height = image.size
190
+
191
+ # Determine the smaller dimension to make a square crop
192
+ min_dim = min(original_width, original_height)
193
+
194
+ # Calculate coordinates for cropping to a centered square
195
+ left = (original_width - min_dim) // 2
196
+ top = (original_height - min_dim) // 2
197
+ right = left + min_dim
198
+ bottom = top + min_dim
199
+
200
+ # Crop the image
201
+ cropped_image = image.crop((left, top, right, bottom))
202
+
203
+ # Resize the image to the desired dimensions
204
+ resized_image = cropped_image.resize((width, height), Image.LANCZOS)
205
+
206
+ return resized_image
207
+
208
+ def resize_image_with_aspect_ratio(image, target_width, target_height):
209
+ """
210
+ Resizes the image to fit within the target dimensions while maintaining aspect ratio.
211
+ If the aspect ratio does not match, the image will be padded with black pixels.
212
+
213
+ Parameters:
214
+ image (PIL.Image.Image): The input image to be resized.
215
+ target_width (int): The target width.
216
+ target_height (int): The target height.
217
+
218
+ Returns:
219
+ PIL.Image.Image: The resized image.
220
+ """
221
+ # Calculate aspect ratios
222
+ original_width, original_height = image.size
223
+ target_aspect = target_width / target_height
224
+ original_aspect = original_width / original_height
225
+
226
+ # Decide whether to fit width or height
227
+ if original_aspect > target_aspect:
228
+ # Image is wider than target aspect ratio
229
+ new_width = target_width
230
+ new_height = int(target_width / original_aspect)
231
+ else:
232
+ # Image is taller than target aspect ratio
233
+ new_height = target_height
234
+ new_width = int(target_height * original_aspect)
235
+
236
+ # Resize the image
237
+ resized_image = image.resize((new_width, new_height), Image.LANCZOS)
238
+
239
+ # Create a new image with target dimensions and black background
240
+ new_image = Image.new("RGB", (target_width, target_height), (0, 0, 0))
241
+ # Paste the resized image onto the center of the new image
242
+ paste_x = (target_width - new_width) // 2
243
+ paste_y = (target_height - new_height) // 2
244
+ new_image.paste(resized_image, (paste_x, paste_y))
245
+
246
+ return new_image
247
+
248
+ def lerp_imagemath(img1, img2, alpha_percent: int = 50):
249
+ """
250
+ Performs linear interpolation (LERP) between two images based on the given alpha value.
251
+
252
+ Parameters:
253
+ img1 (str or PIL.Image.Image): The first image or its file path.
254
+ img2 (str or PIL.Image.Image): The second image or its file path.
255
+ alpha (int): The interpolation factor (0 to 100).
256
+
257
+ Returns:
258
+ PIL.Image.Image: The interpolated image.
259
+ """
260
+ if isinstance(img1, str):
261
+ img1 = open_image(img1)
262
+ if isinstance(img2, str):
263
+ img2 = open_image(img2)
264
+
265
+ # Ensure both images are in the same mode (e.g., RGBA)
266
+ img1 = img1.convert('RGBA')
267
+ img2 = img2.convert('RGBA')
268
+
269
+ # Convert images to NumPy arrays
270
+ arr1 = np.array(img1, dtype=np.float32)
271
+ arr2 = np.array(img2, dtype=np.float32)
272
+
273
+ # Perform linear interpolation
274
+ alpha = alpha_percent / 100.0
275
+ result_arr = (arr1 * (1 - alpha)) + (arr2 * alpha)
276
+
277
+ # Convert the result back to a PIL image
278
+ result_img = Image.fromarray(np.uint8(result_arr))
279
+
280
+ #result_img.show()
281
+ return result_img
282
+
283
+ def shrink_and_paste_on_blank(current_image, mask_width, mask_height, blank_color:tuple[int, int, int, int] = (0,0,0,0)):
284
+ """
285
+ Decreases size of current_image by mask_width pixels from each side,
286
+ then adds a mask_width width transparent frame,
287
+ so that the image the function returns is the same size as the input.
288
+
289
+ Parameters:
290
+ current_image (PIL.Image.Image): The input image to transform.
291
+ mask_width (int): Width in pixels to shrink from each side.
292
+ mask_height (int): Height in pixels to shrink from each side.
293
+ blank_color (tuple): The color of the blank frame (default is transparent).
294
+
295
+ Returns:
296
+ PIL.Image.Image: The transformed image.
297
+ """
298
+ # calculate new dimensions
299
+ width, height = current_image.size
300
+ new_width = width - (2 * mask_width)
301
+ new_height = height - (2 * mask_height)
302
+
303
+ # resize and paste onto blank image
304
+ prev_image = current_image.resize((new_width, new_height))
305
+ blank_image = Image.new("RGBA", (width, height), blank_color)
306
+ blank_image.paste(prev_image, (mask_width, mask_height))
307
+
308
+ return blank_image
309
+
310
+ def multiply_and_blend_images(base_image, image2, alpha_percent=50):
311
+ """
312
+ Multiplies two images and blends the result with the original image.
313
+
314
+ Parameters:
315
+ image1 (PIL.Image.Image): The first input image.
316
+ image2 (PIL.Image.Image): The second input image.
317
+ alpha (float): The blend factor (0.0 to 100.0) for blending the multiplied result with the original image.
318
+
319
+ Returns:
320
+ PIL.Image.Image: The blended image.
321
+ """
322
+ alpha = alpha_percent / 100.0
323
+ if isinstance(base_image, str):
324
+ base_image = open_image(base_image)
325
+ if isinstance(image2, str):
326
+ image2 = open_image(image2)
327
+ # Ensure both images are in the same mode and size
328
+ base_image = base_image.convert('RGBA')
329
+ image2 = image2.convert('RGBA')
330
+ image2 = image2.resize(base_image.size)
331
+
332
+ # Multiply the images
333
+ multiplied_image = ImageChops.multiply(base_image, image2)
334
+
335
+ # Blend the multiplied result with the original
336
+ blended_image = Image.blend(base_image, multiplied_image, alpha)
337
+
338
+ return blended_image
339
+
340
+ def alpha_composite_with_control(base_image, image_with_alpha, alpha_percent=100):
341
+ """
342
+ Overlays image_with_alpha onto base_image with controlled alpha transparency.
343
+
344
+ Parameters:
345
+ base_image (PIL.Image.Image): The base image.
346
+ image_with_alpha (PIL.Image.Image): The image to overlay with an alpha channel.
347
+ alpha_percent (float): The multiplier for the alpha channel (0.0 to 100.0).
348
+
349
+ Returns:
350
+ PIL.Image.Image: The resulting image after alpha compositing.
351
+ """
352
+ alpha_multiplier = alpha_percent / 100.0
353
+ if isinstance(base_image, str):
354
+ base_image = open_image(base_image)
355
+ if isinstance(image_with_alpha, str):
356
+ image_with_alpha = open_image(image_with_alpha)
357
+
358
+ # Ensure both images are in RGBA mode
359
+ base_image = base_image.convert('RGBA')
360
+ image_with_alpha = image_with_alpha.convert('RGBA')
361
+
362
+ # Extract the alpha channel and multiply by alpha_multiplier
363
+ alpha_channel = image_with_alpha.split()[3]
364
+ alpha_channel = alpha_channel.point(lambda p: p * alpha_multiplier)
365
+
366
+ # Apply the modified alpha channel back to the image
367
+ image_with_alpha.putalpha(alpha_channel)
368
+
369
+ # Composite the images
370
+ result = Image.alpha_composite(base_image, image_with_alpha)
371
+
372
+ return result
373
+
374
+ def apply_alpha_mask(image, mask_image, invert = False):
375
+ """
376
+ Applies a mask image as the alpha channel of the input image.
377
+
378
+ Parameters:
379
+ image (PIL.Image.Image): The image to apply the mask to.
380
+ mask_image (PIL.Image.Image): The alpha mask to apply.
381
+ invert (bool): Whether to invert the mask (default is False).
382
+
383
+ Returns:
384
+ PIL.Image.Image: The image with the applied alpha mask.
385
+ """
386
+ # Resize the mask to match the current image size
387
+ mask_image = resize_and_crop_image(mask_image, image.width, image.height).convert('L') # convert to grayscale
388
+ if invert:
389
+ mask_image = ImageOps.invert(mask_image)
390
+ # Apply the mask as the alpha layer of the current image
391
+ result_image = image.copy()
392
+ result_image.putalpha(mask_image)
393
+ return result_image
394
+
395
+ def resize_and_crop_image(image: Image, new_width: int = 512, new_height: int = 512) -> Image:
396
+ """
397
+ Resizes and crops an image to a specified width and height. This ensures that the entire new_width and new_height
398
+ dimensions are filled by the image, and the aspect ratio is maintained.
399
+
400
+ Parameters:
401
+ image (PIL.Image.Image): The image to be resized and cropped.
402
+ new_width (int): The desired width of the new image (default is 512).
403
+ new_height (int): The desired height of the new image (default is 512).
404
+
405
+ Returns:
406
+ PIL.Image.Image: The resized and cropped image.
407
+ """
408
+ # Get the dimensions of the original image
409
+ orig_width, orig_height = image.size
410
+ # Calculate the aspect ratios of the original and new images
411
+ orig_aspect_ratio = orig_width / float(orig_height)
412
+ new_aspect_ratio = new_width / float(new_height)
413
+ # Calculate the new size of the image while maintaining aspect ratio
414
+ if orig_aspect_ratio > new_aspect_ratio:
415
+ # The original image is wider than the new image, so we need to crop the sides
416
+ resized_width = int(new_height * orig_aspect_ratio)
417
+ resized_height = new_height
418
+ left_offset = (resized_width - new_width) // 2
419
+ top_offset = 0
420
+ else:
421
+ # The original image is taller than the new image, so we need to crop the top and bottom
422
+ resized_width = new_width
423
+ resized_height = int(new_width / orig_aspect_ratio)
424
+ left_offset = 0
425
+ top_offset = (resized_height - new_height) // 2
426
+ # Resize the image with Lanczos resampling filter
427
+ resized_image = image.resize((resized_width, resized_height), resample=Image.Resampling.LANCZOS)
428
+ # Crop the image to fill the entire height and width of the new image
429
+ cropped_image = resized_image.crop((left_offset, top_offset, left_offset + new_width, top_offset + new_height))
430
+ return cropped_image
431
+
432
+ ##################################################### LUTs ############################################################
433
+
434
+ def is_3dlut_row(row: List[str]) -> bool:
435
+ """
436
+ Check if one line in the file has exactly 3 numeric values.
437
+
438
+ Parameters:
439
+ row (list): A list of strings representing the values in a row.
440
+
441
+ Returns:
442
+ bool: True if the row has exactly 3 numeric values, False otherwise.
443
+ """
444
+ try:
445
+ row_values = [float(val) for val in row]
446
+ return len(row_values) == 3
447
+ except ValueError:
448
+ return False
449
+
450
+
451
+ def read_lut(path_lut: Union[str, os.PathLike], num_channels: int = 3) -> ImageFilter.Color3DLUT:
452
+ """
453
+ Read LUT from a raw file.
454
+
455
+ Each line in the file is considered part of the LUT table. The function
456
+ reads the file, parses the rows, and constructs a Color3DLUT object.
457
+
458
+ Args:
459
+ path_lut: A string or os.PathLike object representing the path to the LUT file.
460
+ num_channels: An integer specifying the number of color channels in the LUT (default is 3).
461
+
462
+ Returns:
463
+ An instance of ImageFilter.Color3DLUT representing the LUT.
464
+
465
+ Raises:
466
+ FileNotFoundError: If the LUT file specified by path_lut does not exist.
467
+ """
468
+ with open(path_lut) as f:
469
+ lut_raw = f.read().splitlines()
470
+ size = round(len(lut_raw) ** (1 / 3))
471
+ row2val = lambda row: tuple([float(val) for val in row.split(" ")])
472
+ lut_table = [row2val(row) for row in lut_raw if is_3dlut_row(row.split(" "))]
473
+ return ImageFilter.Color3DLUT(size, lut_table, num_channels)
474
+
475
+ def apply_lut(img: Image, lut_path: str = "", lut: ImageFilter.Color3DLUT = None) -> Image:
476
+ """
477
+ Apply a LUT to an image and return a PIL Image with the LUT applied.
478
+
479
+ The function applies the LUT to the input image using the filter() method of the PIL Image class.
480
+
481
+ Args:
482
+ img: A PIL Image object to which the LUT should be applied.
483
+ lut_path: A string representing the path to the LUT file (optional if lut argument is provided).
484
+ lut: An instance of ImageFilter.Color3DLUT representing the LUT (optional if lut_path is provided).
485
+
486
+ Returns:
487
+ A PIL Image object with the LUT applied.
488
+
489
+ Raises:
490
+ ValueError: If both lut_path and lut arguments are not provided.
491
+ """
492
+ if lut is None:
493
+ if lut_path == "":
494
+ raise ValueError("Either lut_path or lut argument must be provided.")
495
+ lut = read_lut(lut_path)
496
+ return img.filter(lut)
497
+
498
+ def show_lut(lut_filename: str, lut_example_image: Image = default_lut_example_img) -> Image:
499
+ if lut_filename is not None:
500
+ try:
501
+ lut_example_image = apply_lut(lut_example_image, lut_filename)
502
+ except Exception as e:
503
+ print(f"BAD LUT: Error applying LUT {str(e)}.")
504
+ else:
505
+ lut_example_image = open_image(default_lut_example_img)
506
+ return lut_example_image
507
+
508
+
509
+
510
+ def convert_rgb_to_rgba_safe(image: Image) -> Image:
511
+ """
512
+ Converts an RGB image to RGBA by adding an alpha channel.
513
+ Ensures that the original image remains unaltered.
514
+
515
+ Parameters:
516
+ image (PIL.Image.Image): The RGB image to convert.
517
+
518
+ Returns:
519
+ PIL.Image.Image: The converted RGBA image.
520
+ """
521
+ if image.mode != 'RGB':
522
+ if image.mode == 'RGBA':
523
+ return image
524
+ elif image.mode == 'P':
525
+ # Convert palette image to RGBA
526
+ image = image.convert('RGB')
527
+ else:
528
+ raise ValueError("Unsupported image mode for conversion to RGBA.")
529
+ # Create a copy of the image to avoid modifying the original
530
+ rgba_image = image.copy()
531
+ # Optionally, set a default alpha value (e.g., fully opaque)
532
+ alpha = Image.new('L', rgba_image.size, 255) # 255 for full opacity
533
+ rgba_image.putalpha(alpha)
534
+ return rgba_image
535
+
536
+ def apply_lut_to_image_path(lut_filename: str, image_path: str) -> tuple[Image, str]:
537
+ """
538
+ Apply a LUT to an image and return the result.
539
+ Supports ICO files by converting them to PNG with RGBA channels.
540
+
541
+ Args:
542
+ lut_filename: A string representing the path to the LUT file.
543
+ image_path: A string representing the path to the input image.
544
+
545
+ Returns:
546
+ tuple: A tuple containing the PIL Image object with the LUT applied and the new image path as a string.
547
+ """
548
+ if image_path is None:
549
+ raise UserWarning("No image provided.")
550
+ return None, None
551
+ path = Path(image_path)
552
+ img = open_image(image_path)
553
+ if not ((path.suffix.lower() == '.png' and img.mode == 'RGBA')):
554
+ if image_path.lower().endswith(('.jpg', '.jpeg')):
555
+ img, new_image_path = convert_jpg_to_rgba(path)
556
+ elif image_path.lower().endswith('.ico'):
557
+ img, new_image_path = convert_to_rgba_png(image_path)
558
+ elif image_path.lower().endswith(('.gif', '.webp')):
559
+ img, new_image_path = convert_to_rgba_png(image_path)
560
+ else:
561
+ img, new_image_path = convert_to_rgba_png(image_path)
562
+ delete_image(image_path)
563
+ else:
564
+ new_image_path = image_path
565
+ if lut_filename is not None:
566
+ try:
567
+ img = apply_lut(img, lut_filename)
568
+ except Exception as e:
569
+ print(f"BAD LUT: Error applying LUT {str(e)}.")
570
+ img.save(new_image_path, format='PNG')
571
+ return img, str(new_image_path)
572
+
573
+ ############################################# RGBA ###########################################################
574
+
575
+ # Example usage
576
+ # convert_jpg_to_rgba('input.jpg', 'output.png')
577
+ def convert_jpg_to_rgba(input_path) -> tuple[Image, str]:
578
+ """
579
+ Convert a JPG image to RGBA format and save it as a PNG.
580
+
581
+ Args:
582
+ input_path (str or Path): Path to the input JPG image file.
583
+
584
+ Raises:
585
+ FileNotFoundError: If the input file does not exist.
586
+ ValueError: If the input file is not a JPG.
587
+ OSError: If there's an error reading or writing the file.
588
+
589
+ Returns:
590
+ tuple: A tuple containing the RGBA image and the output path as a string.
591
+ """
592
+ try:
593
+ # Convert input_path to Path object if it's a string
594
+ input_path = Path(input_path)
595
+ output_path = input_path.with_suffix('.png')
596
+
597
+ # Check if the input file exists
598
+ if not input_path.exists():
599
+ raise FileNotFoundError(f"The file {input_path} does not exist.")
600
+
601
+ # Check file extension first to skip unnecessary processing
602
+ if input_path.suffix.lower() not in ('.jpg', '.jpeg'):
603
+ print(f"Skipping conversion: {input_path} is not a JPG or JPEG file.")
604
+ return None, str(output_path)
605
+
606
+ print(f"Converting to PNG: {input_path} is a JPG or JPEG file.")
607
+
608
+ # Open the image file
609
+ with Image.open(input_path) as img:
610
+ # Convert the image to RGBA mode
611
+ rgba_img = img.convert('RGBA')
612
+
613
+ # Ensure the directory exists for the output file
614
+ output_path.parent.mkdir(parents=True, exist_ok=True)
615
+
616
+ # Save the image with RGBA mode as PNG
617
+ rgba_img.save(output_path)
618
+
619
+ except FileNotFoundError as e:
620
+ print(f"Error: {e}")
621
+ except ValueError as e:
622
+ print(f"Error: {e}")
623
+ except OSError as e:
624
+ print(f"Error: An OS error occurred while processing the image - {e}")
625
+ except Exception as e:
626
+ print(f"An unexpected error occurred: {e}")
627
+ return rgba_img, str(output_path)
628
+
629
+
630
+ def convert_to_rgba_png(file_path: str) -> tuple[Image, str]:
631
+ """
632
+ Converts an image to RGBA PNG format and saves it with the same base name and a .png extension.
633
+ Supports ICO files.
634
+
635
+ Args:
636
+ file_path (str): The path to the input image file.
637
+
638
+ Returns:
639
+ tuple: A tuple containing the RGBA image and the new file path as a string.
640
+ """
641
+ new_file_path = None
642
+ rgba_img = None
643
+ img = None
644
+ if file_path is None:
645
+ raise UserWarning("No image provided.")
646
+ return None, None
647
+ try:
648
+ img = open_image(file_path)
649
+ print(f"Opened image: {file_path}\n")
650
+ # Handle ICO files
651
+ if file_path.lower().endswith('.ico'):
652
+ rgba_img = img.convert('RGBA')
653
+ new_file_path = Path(file_path).with_suffix('.png')
654
+ rgba_img.save(new_file_path, format='PNG')
655
+ print(f"Converted ICO to PNG: {new_file_path}")
656
+ else:
657
+ rgba_img, new_file_path = convert_jpg_to_rgba(file_path)
658
+ if rgba_img is None:
659
+ rgba_img = convert_rgb_to_rgba_safe(img)
660
+ new_file_path = Path(file_path).with_suffix('.png')
661
+ rgba_img.save(new_file_path, format='PNG')
662
+ print(f"Image saved as {new_file_path}")
663
+ except ValueError as ve:
664
+ print(f"ValueError: {ve}")
665
+ except Exception as e:
666
+ print(f"Error converting image: {e}")
667
+ return rgba_img if rgba_img else img, str(new_file_path)
668
+
669
+ def delete_image(file_path: str) -> None:
670
+ """
671
+ Deletes the specified image file.
672
+
673
+ Parameters:
674
+ file_path (str): The path to the image file to delete.
675
+
676
+ Raises:
677
+ FileNotFoundError: If the file does not exist.
678
+ Exception: If there is an error deleting the file.
679
+ """
680
+ try:
681
+ path = Path(file_path)
682
+ path.unlink()
683
+ print(f"Deleted original image: {file_path}")
684
+ except FileNotFoundError:
685
+ print(f"File not found: {file_path}")
686
+ except Exception as e:
687
+ print(f"Error deleting image: {e}")
modules/version_info.py ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # modules/version_info.py
2
+
3
+ import subprocess
4
+ import os
5
+ import sys
6
+ import gc
7
+ import gradio as gr
8
+
9
+ git = os.environ.get('GIT', "git")
10
+
11
+ def commit_hash():
12
+ try:
13
+ return subprocess.check_output([git, "rev-parse", "HEAD"], shell=False, encoding='utf8').strip()
14
+ except Exception:
15
+ return "<none>"
16
+
17
+ def get_xformers_version():
18
+ try:
19
+ import xformers
20
+ return xformers.__version__
21
+ except Exception:
22
+ return "<none>"
23
+ def get_transformers_version():
24
+ try:
25
+ import transformers
26
+ return transformers.__version__
27
+ except Exception:
28
+ return "<none>"
29
+
30
+ def get_accelerate_version():
31
+ try:
32
+ import accelerate
33
+ return accelerate.__version__
34
+ except Exception:
35
+ return "<none>"
36
+ def get_safetensors_version():
37
+ try:
38
+ import safetensors
39
+ return safetensors.__version__
40
+ except Exception:
41
+ return "<none>"
42
+ def get_diffusers_version():
43
+ try:
44
+ import diffusers
45
+ return diffusers.__version__
46
+ except Exception:
47
+ return "<none>"
48
+
49
+ def get_torch_info():
50
+ from torch import __version__ as torch_version_, version, cuda, backends
51
+ initialize_cuda()
52
+ try:
53
+ info = [torch_version_, f"CUDA Version:{version.cuda}", f"Available:{cuda.is_available()}", f"flash attention enabled: {backends.cuda.flash_sdp_enabled()}", f"Capabilities: {cuda.get_device_capability(0)}", f"Device Name: {cuda.get_device_name(0)}", f"Device Count: {cuda.device_count()}",f"Devices: {os.environ['CUDA_VISIBLE_DEVICES']}", f"Zero :{os.environ['CUDA_MODULE_LOADING']}"]
54
+ del torch_version_, version, cuda, backends
55
+ return info
56
+ except Exception:
57
+ del torch_version_, version, cuda, backends
58
+ return "<none>"
59
+
60
+ def release_torch_resources():
61
+ from torch import cuda
62
+ # Clear the CUDA cache
63
+ cuda.empty_cache()
64
+ cuda.ipc_collect()
65
+ # Delete any objects that are using GPU memory
66
+ #for obj in gc.get_objects():
67
+ # if is_tensor(obj) or (hasattr(obj, 'data') and is_tensor(obj.data)):
68
+ # del obj
69
+ # Run garbage collection
70
+ del cuda
71
+ gc.collect()
72
+
73
+
74
+ def initialize_cuda():
75
+ from torch import cuda, version
76
+ if cuda.is_available():
77
+ device = cuda.device("cuda")
78
+ print(f"CUDA is available. Using device: {cuda.get_device_name(0)} with CUDA version: {version.cuda}")
79
+ result = "cuda"
80
+ else:
81
+ device = cuda.device("cpu")
82
+ print("CUDA is not available. Using CPU.")
83
+ result = "cpu"
84
+ return result
85
+
86
+ def versions_html():
87
+ from torch import __version__ as torch_version_
88
+ python_version = ".".join([str(x) for x in sys.version_info[0:3]])
89
+ commit = commit_hash()
90
+
91
+ # Define the Toggle Dark Mode link with JavaScript
92
+ toggle_dark_link = '''
93
+ <a href="#" onclick="document.body.classList.toggle('dark'); return false;" style="cursor: pointer; text-decoration: underline; color: #1a0dab;">
94
+ Toggle Dark Mode
95
+ </a>
96
+ '''
97
+
98
+ v_html = f"""
99
+ version: <a href="https://huggingface.co/spaces/Surn/HexaGrid/commit/{"huggingface" if commit == "<none>" else commit}" target="_blank">{"huggingface" if commit == "<none>" else commit}</a>
100
+ &#x2000;•&#x2000;
101
+ python: <span title="{sys.version}">{python_version}</span>
102
+ &#x2000;•&#x2000;
103
+ torch: {torch_version_}
104
+ &#x2000;•&#x2000;
105
+ diffusers: {get_diffusers_version()}
106
+ &#x2000;•&#x2000;
107
+ transformers: {get_transformers_version()}
108
+ &#x2000;•&#x2000;
109
+ xformers: {get_xformers_version()}
110
+ &#x2000;•&#x2000;
111
+ gradio: {gr.__version__}
112
+ &#x2000;•&#x2000;
113
+ {toggle_dark_link}
114
+ <br>
115
+ Full GPU Info:{get_torch_info()}
116
+ """
117
+ del torch_version_
118
+ return v_html
requirements.txt CHANGED
@@ -1,6 +1,14 @@
1
- accelerate
2
- diffusers
3
- peft
4
  safetensors
5
  sentencepiece
6
- transformers
 
 
 
 
 
 
 
 
 
1
+ git+https://github.com/huggingface/diffusers.git
2
+ git+https://github.com/huggingface/transformers.git
3
+ git+https://github.com/huggingface/accelerate.git
4
  safetensors
5
  sentencepiece
6
+ git+https://github.com/huggingface/peft.git
7
+ Pillow>=11.0.0
8
+ numpy
9
+ pycairo
10
+ cairocffi
11
+ pangocffi
12
+ pangocairocffi
13
+ cairosvg
14
+ python-dotenv
style_20250128.css ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .interface-wrapper {
2
+ max-width: 1024px;
3
+ margin: 0 auto;
4
+ }
5
+
6
+ .centered {
7
+ margin: 0 auto;
8
+ display: block;
9
+ }
10
+
11
+ .solid {
12
+ opacity: 1.0 !important;
13
+ height: auto !important;
14
+ }
15
+
16
+ .intro {
17
+ font-size: 1.2em !important;
18
+ font-weight: bold;
19
+ text-align: center;
20
+ background-color: rgba(242, 218, 163, 0.62);
21
+ }
22
+
23
+ .dark .gradio-container.gradio-container-5-12-0 .contain .intro {
24
+ background-color: rgba(41, 18, 5, 0.38) !important;
25
+ }
26
+
27
+ .small {
28
+ font-size: smaller !important;
29
+ text-align: center;
30
+ }
31
+
32
+ .imgcontainer img {
33
+ object-fit: contain !important;
34
+ }
35
+
36
+ #examples {
37
+ font-weight: bolder;
38
+ }
39
+
40
+ --background-fill-primary: #FBCE50 !important;
41
+ #col-container {
42
+ max-width: 1024px;
43
+ margin-left: auto;
44
+ margin-right: auto;
45
+ }
46
+
47
+ a {
48
+ text-decoration-line: underline;
49
+ font-weight: 600;
50
+ }
51
+
52
+ #btn-generate {
53
+ background-image: linear-gradient(to right bottom, rgb(157, 255, 157), rgb(229, 255, 235));
54
+ }
55
+
56
+ #btn-generate:hover {
57
+ background-image: linear-gradient(to right bottom, rgb(229, 255, 229), rgb(255, 255, 255));
58
+ }
59
+
60
+ #btn-generate:active {
61
+ background-image: linear-gradient(to right bottom, rgb(229, 255, 235), rgb(157, 255, 157));
62
+ }
63
+
64
+ #versions {
65
+ margin-top: 1em;
66
+ width: 100%;
67
+ text-align: center;
68
+ }
69
+
70
+ .small-btn {
71
+ max-width: 75px;
72
+ }
73
+
74
+ #gallery .thumbnails {
75
+ flex-direction: column !important;
76
+ display: inline-flex !important;
77
+ flex-wrap: wrap !important;
78
+ position: relative !important;
79
+ }
80
+
81
+ #gallery caption.caption {
82
+ flex-direction: row !important;
83
+ display: inline-flex !important;
84
+ flex-wrap: wrap;
85
+ white-space: unset !important;
86
+ }
87
+
88
+ #gallery .image-button img.with-caption {
89
+ object-fit: cover !important;
90
+ object-position: center !important;
91
+ }
92
+
93
+ #gallery button.preview {
94
+ position: relative !important;
95
+ }
96
+
97
+ .gradio-container::before {
98
+ content: ' ';
99
+ display: block;
100
+ position: absolute;
101
+ left: 0;
102
+ top: 0;
103
+ width: 100%;
104
+ height: 100%;
105
+ opacity: 0.25;
106
+ background-image: url('gradio_api/file=./images/logo.png');
107
+ background-repeat: no-repeat;
108
+ background-position: 50% 0;
109
+ background-size: cover;
110
+ background-color: rgba(0,0,0,0.9);
111
+ }
112
+
113
+ #component-0, #component-1 {
114
+ opacity: 0.9;
115
+ }
116
+
117
+ #excluded_colors {
118
+ width: 95%;
119
+ margin: 0 auto;
120
+ font-size: smaller;
121
+ }
122
+
123
+ @media only screen and (min-width: 1920px) {
124
+ .gradio-container, .gradio-container::before {
125
+ max-width: 1920px !important;
126
+ }
127
+ }