Spaces:
Runtime error
Runtime error
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,324 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
importare il sistema operativo
|
2 |
+
importa casuale
|
3 |
+
importa sys
|
4 |
+
dalla digitazione import Sequenza , Mappatura, Qualsiasi , Unione
|
5 |
+
torcia di importazione
|
6 |
+
importa gradio come gr
|
7 |
+
da PIL importa Immagine
|
8 |
+
importa numpy come np
|
9 |
+
da huggingface_hub importa hf_hub_download
|
10 |
+
spazi di importazione
|
11 |
+
da comfy import model_management
|
12 |
+
|
13 |
+
CHROMA_VERSION = "chroma-unlocked-v34.safetensors"
|
14 |
+
|
15 |
+
# Scarica i modelli richiesti
|
16 |
+
t5_path = hf_hub_download(repo_id= "comfyanonymous/flux_text_encoders" , filename= "t5xxl_fp8_e4m3fn.safetensors" , local_dir= "modelli/text_encoders/" )
|
17 |
+
vae_path = hf_hub_download(repo_id= "lodestones/Chroma" , filename= "ae.safetensors" , local_dir= "modelli/vae" )
|
18 |
+
unet_path = hf_hub_download(repo_id= "lodestones/Chroma" , filename=CHROMA_VERSION, local_dir= "modelli/unet" )
|
19 |
+
|
20 |
+
# Esempi di prompt con i relativi parametri
|
21 |
+
ESEMPI = [
|
22 |
+
[
|
23 |
+
Un ritratto ravvicinato di alta moda di una donna bionda con occhiali da sole trasparenti. L'immagine utilizza una decisa combinazione di verde acqua e rosso per un'illuminazione spettacolare. Lo sfondo è un semplice verde acqua. La foto è nitida e ben composta, ed è progettata per la visualizzazione con occhiali 3D anaglifici per un effetto ottimale. Sembra realizzata da un professionista .
|
24 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
25 |
+
1024 , 1024 , 36 , 3.0 , 229
|
26 |
+
],
|
27 |
+
[
|
28 |
+
Un giovane sorride ampiamente mentre indossa un cappello da capitano blu e occhiali da sole aviator blu a specchio. L'uomo è il fulcro dell'immagine, su uno sfondo di lungomare piacevolmente sfocato con barche ed edifici. Lo scatto è allegro, giocoso e dall'aspetto amatoriale.
|
29 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
30 |
+
1024 , 1024 , 40 , 2.1 , 424
|
31 |
+
],
|
32 |
+
[
|
33 |
+
Uno Shiba Inu sorride ampiamente mentre indossa un cappello da capitano blu e occhiali da sole aviatore blu a specchio. Il cane è il fulcro dell'immagine, su uno sfondo di lungomare piacevolmente sfocato con barche ed edifici. Lo scatto è allegro, giocoso e dall'aspetto amatoriale.
|
34 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
35 |
+
1024 , 1024 , 28 , 2.9 , 413
|
36 |
+
],
|
37 |
+
[
|
38 |
+
Un dipinto raffigura un uomo barbuto con una camicia beige che stringe una cima su una barca a vela, mentre affronta mari agitati sotto un tramonto spettacolare. Un'altra figura appare sullo sfondo in lontananza, e lo stile è impressionista, con pennellate nitide e grande maestria. L'effetto complessivo è di avventura e libertà .
|
39 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
40 |
+
1024 , 1024 , 33 , 4.6 , 281
|
41 |
+
],
|
42 |
+
[
|
43 |
+
Un dipinto mostra un lupo maschio antropomorfo seduto su una roccia in una foresta, antropomorfo, maschio, solitario, canino, canide, lupo mannaro, antropomorfo muscoloso, corpo nero, pelliccia nera, che allunga le zampe verso l'osservatore, sfondo dettagliato, esterno. La scena è dettagliata, con una ridotta profondità di campo che si concentra sul lupo antropomorfo. L'effetto generale è fantasy e cinematografico .
|
44 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
45 |
+
1024 , 1024 , 26 , 3,8 , 326
|
46 |
+
],
|
47 |
+
[
|
48 |
+
"Una simpatica illustrazione in stile cartoon di un enorme drago nero con ali che riproducono galassie cosmiche, seduto in cima a un castello che domina una città portuale medievale al tramonto. Lo stile è luminoso e dai toni pastello, con linee morbide. L'opera è pulita e piuttosto ben realizzata. "
|
49 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
50 |
+
1024 , 1024 , 41 , 5.7 , 244
|
51 |
+
],
|
52 |
+
[
|
53 |
+
Un cane maschio antropomorfo a pelo lungo, con una macchia bianca sul petto e brillanti occhi giallo-verdi, è seduto su un'isola grigio chiaro della cucina in un appartamento di New York inondato di sole. La vista della città è sfocata, mostrando una ridotta profondità di campo . Il gatto ha un collare scuro con un piccolo campanellino. L'estetica della foto è pulita, moderna e leggermente drammatica grazie all'illuminazione.
|
54 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
55 |
+
1024 , 1024 , 26 , 4.7 , 242
|
56 |
+
],
|
57 |
+
[
|
58 |
+
Un allegro collage mostra 4 gechi leopardo, ognuno in un riquadro separato. I gechi variano per colore e motivo, ma sono tutti ritratti in primo piano e con lo sguardo rivolto direttamente alla fotocamera. Gli sfondi sono diversi, illustrando vari elementi del terrario e superfici semplici. Scatti di alta qualità, illuminazione brillante, qualità fotografica amatoriale. L'estetica generale è semplice e commovente .
|
59 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
60 |
+
1024 , 1024 , 26 , 4.7 , 249
|
61 |
+
],
|
62 |
+
[
|
63 |
+
Un allegro collage presenta 4 simpatici peluche di Nick Wilde, raffiguranti il lupo antropomorfo, ognuno in un quadrato separato. Gli sfondi sono diversi, raffigurando vari letti e superfici semplici. Scatti di alta qualità, illuminazione brillante, qualità fotografica amatoriale. L'estetica generale è semplice e commovente .
|
64 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
65 |
+
1024 , 1024 , 26 , 5.4 , 263
|
66 |
+
],
|
67 |
+
[
|
68 |
+
"questa immagine raffigura un adesivo di un telegramma con spessi contorni bianchi di una volpe antropomorfa maschio" ,
|
69 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
70 |
+
1024 , 1024 , 28 , 3.9 , 399
|
71 |
+
],
|
72 |
+
[
|
73 |
+
"Estremamente ravvicinato di un singolo occhio di tigre, vista frontale diretta. Iride e pupilla dettagliate. Messa a fuoco nitida sulla texture e sul colore dell'occhio. Illuminazione naturale per catturare la brillantezza e la profondità autentiche degli occhi. La parola "Chroma" è dipinta sopra con grandi pennellate bianche con texture visibile. "
|
74 |
+
"bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
75 |
+
1024 , 1024 , 26 , 4.0 , 9
|
76 |
+
]
|
77 |
+
]
|
78 |
+
|
79 |
+
# Funzioni di utilità
|
80 |
+
def get_value_at_index ( obj: Unione [ Sequenza , Mappatura], indice: int ) -> Qualsiasi :
|
81 |
+
Tentativo :
|
82 |
+
restituisci obj[indice]
|
83 |
+
eccetto KeyError:
|
84 |
+
restituisci obj[ "risultato" ][indice]
|
85 |
+
|
86 |
+
def find_path ( nome: str , percorso: str = Nessuno ) -> str :
|
87 |
+
se il percorso è Nessuno :
|
88 |
+
percorso = os.getcwd()
|
89 |
+
se il nome è in os.listdir(percorso):
|
90 |
+
path_name = os.path.join(percorso, nome)
|
91 |
+
stampa ( f" {nome} trovato: {nome_percorso} " )
|
92 |
+
restituisci il percorso
|
93 |
+
directory_genitore = os.path.dirname(percorso)
|
94 |
+
se parent_directory == percorso:
|
95 |
+
restituisci Nessuno
|
96 |
+
restituisci find_path(nome, directory_padre)
|
97 |
+
|
98 |
+
def add_comfyui_directory_to_sys_path () -> Nessuno :
|
99 |
+
comfyui_path = find_path( "ComfyUI" )
|
100 |
+
se comfyui_path non è None e os.path.isdir(comfyui_path):
|
101 |
+
sys.path.append(comfyui_path)
|
102 |
+
stampa ( f"' {comfyui_path} ' aggiunto a sys.path" )
|
103 |
+
|
104 |
+
def add_extra_model_paths () -> Nessuno :
|
105 |
+
Tentativo :
|
106 |
+
dall'importazione principale load_extra_path_config
|
107 |
+
eccetto ImportError:
|
108 |
+
da utils.extra_config importa load_extra_path_config
|
109 |
+
percorsi_modello_extra = trova_percorso( "percorsi_modello_extra.yaml" )
|
110 |
+
se extra_model_paths non è None :
|
111 |
+
carica_configurazione_percorso_extra(percorsi_modello_extra)
|
112 |
+
altro :
|
113 |
+
print ( "Impossibile trovare il file di configurazione extra_model_paths." )
|
114 |
+
|
115 |
+
def import_custom_nodes () -> Nessuno :
|
116 |
+
importa asyncio
|
117 |
+
esecuzione dell'importazione
|
118 |
+
da nodi importa init_extra_nodes
|
119 |
+
server di importazione
|
120 |
+
ciclo = asyncio.new_event_loop()
|
121 |
+
asyncio.set_event_loop(ciclo)
|
122 |
+
istanza_server = server.PromptServer(ciclo)
|
123 |
+
esecuzione.PromptQueue(istanza_server)
|
124 |
+
init_extra_nodes()
|
125 |
+
|
126 |
+
# Inizializza i percorsi
|
127 |
+
aggiungi_directory_comfyui_al_percorso_di_sistema()
|
128 |
+
aggiungi_percorsi_modello_extra()
|
129 |
+
importa_nodi_personalizzati()
|
130 |
+
|
131 |
+
# Importa tutti i nodi necessari
|
132 |
+
da nodi importa (
|
133 |
+
NODE_CLASS_MAPPINGS,
|
134 |
+
CLIPTextEncode,
|
135 |
+
CLIPLader,
|
136 |
+
VAEDecode,
|
137 |
+
Caricatore UNET,
|
138 |
+
VAELoader,
|
139 |
+
SalvaImmagine,
|
140 |
+
)
|
141 |
+
|
142 |
+
# Inizializza tutti i caricatori di modelli al di fuori della funzione
|
143 |
+
rumore casuale = NODE_CLASS_MAPPINGS[ "Rumore casuale" ]()
|
144 |
+
emptysd3latentimage = NODE_CLASS_MAPPINGS[ "EmptySD3LatentImage" ]()
|
145 |
+
ksamplerselect = NODE_CLASS_MAPPINGS[ "KSamplerSelect" ]()
|
146 |
+
caricatore di clip = CLIPLoader()
|
147 |
+
t5tokenizeroptions = NODE_CLASS_MAPPINGS[ "T5TokenizerOptions" ]()
|
148 |
+
cliptextencode = CLIPTextEncode()
|
149 |
+
unetloader = UNETLoader()
|
150 |
+
vaeloader = VAELoader()
|
151 |
+
cfgguider = NODE_CLASS_MAPPINGS[ "CFGGuider" ]()
|
152 |
+
basicscheduler = NODE_CLASS_MAPPINGS[ "BasicScheduler" ]()
|
153 |
+
samplercustomadvanced = NODE_CLASS_MAPPINGS[ "SamplerCustomAdvanced" ]()
|
154 |
+
vaedecode = VAEDecode()
|
155 |
+
salvaimmagine = SalvaImmagine()
|
156 |
+
|
157 |
+
# Modelli di carico
|
158 |
+
cliploader_78 = cliploader.load_clip(
|
159 |
+
clip_name= "t5xxl_fp8_e4m3fn.safetensors" , tipo = "chroma" , dispositivo = "predefinito"
|
160 |
+
)
|
161 |
+
t5tokenizeroptions_82 = t5tokenizeroptions.set_options(
|
162 |
+
min_padding= 1 , min_length= 0 , clip=get_value_at_index(cliploader_78, 0 )
|
163 |
+
)
|
164 |
+
unetloader_76 = unetloader.load_unet(
|
165 |
+
unet_name=VERSIONE_CROMATICA, weight_dtype= "fp8_e4m3fn"
|
166 |
+
)
|
167 |
+
vaeloader_80 = vaeloader.load_vae(vae_name= "ae.safetensors" )
|
168 |
+
|
169 |
+
# Aggiungi tutti i modelli che caricano un file safetensors
|
170 |
+
caricatori_modello = [cliploader_78, unetloader_76, vaeloader_80]
|
171 |
+
|
172 |
+
# Controlla quali modelli sono validi e come caricarli al meglio
|
173 |
+
modelli_validi = [
|
174 |
+
getattr (caricatore[ 0 ], 'patcher' , caricatore[ 0 ])
|
175 |
+
per il caricatore in model_loaders
|
176 |
+
se non è isinstance (loader[ 0 ], dict ) e non è isinstance ( getattr (loader[ 0 ], 'patcher' , None ), dict )
|
177 |
+
]
|
178 |
+
|
179 |
+
# Infine carica i modelli
|
180 |
+
gestione_modello.carica_modelli_gpu(modelli_validi)
|
181 |
+
|
182 |
+
@spazi.GPU
|
183 |
+
def generate_image ( prompt, negative_prompt, larghezza, altezza, passaggi, cfg, seed ):
|
184 |
+
con torch.inference_mode():
|
185 |
+
# Imposta un seme casuale se fornito
|
186 |
+
se seme == - 1 :
|
187 |
+
seme = random.randint( 1 , 2 ** 64 )
|
188 |
+
random.seed(seme)
|
189 |
+
|
190 |
+
randomnoise_68 = randomnoise.get_noise(noise_seed=seme)
|
191 |
+
emptysd3latentimage_69 = emptysd3latentimage.generate(
|
192 |
+
larghezza=larghezza, altezza=altezza, dimensione_lotto= 1
|
193 |
+
)
|
194 |
+
ksamplerselect_72 = ksamplerselect.get_sampler(sampler_name= "euler" )
|
195 |
+
|
196 |
+
cliptextencode_74 = cliptextencode.encode(
|
197 |
+
testo=richiesta,
|
198 |
+
clip=ottieni_valore_all'indice(t5tokenizeroptions_82, 0 ),
|
199 |
+
)
|
200 |
+
|
201 |
+
cliptextencode_75 = cliptextencode.encode(
|
202 |
+
testo=prompt_negativo,
|
203 |
+
clip=ottieni_valore_all'indice(t5tokenizeroptions_82, 0 ),
|
204 |
+
)
|
205 |
+
|
206 |
+
cfgguider_73 = cfgguider.get_guider(
|
207 |
+
cfg=cfg,
|
208 |
+
modello=ottieni_valore_all'indice(unetloader_76, 0 ),
|
209 |
+
positivo=ottieni_valore_all'indice(cliptextencode_74, 0 ),
|
210 |
+
negativo=get_value_at_index(cliptextencode_75, 0 ),
|
211 |
+
)
|
212 |
+
|
213 |
+
basicscheduler_84 = basicscheduler.get_sigmas(
|
214 |
+
scheduler= "beta" ,
|
215 |
+
passi=passi,
|
216 |
+
riduzione del rumore = 1 ,
|
217 |
+
modello=ottieni_valore_all'indice(unetloader_76, 0 ),
|
218 |
+
)
|
219 |
+
|
220 |
+
samplercustomadvanced_67 = samplercustomadvanced.sample(
|
221 |
+
rumore=ottieni_valore_all'indice(rumore_casuale_68, 0 ),
|
222 |
+
guider=get_value_at_index(cfgguider_73, 0 ),
|
223 |
+
campionatore=ottieni_valore_all'indice(ksamplerselect_72, 0 ),
|
224 |
+
sigma=ottieni_valore_all'indice(basicscheduler_84, 0 ),
|
225 |
+
latent_image=ottieni_valore_all'indice(emptysd3latentimage_69, 0 ),
|
226 |
+
)
|
227 |
+
|
228 |
+
vaedecode_79 = vaedecode.decode(
|
229 |
+
campioni=ottieni_valore_all'indice(campionatorepersonalizzatoavanzato_67, 0 ),
|
230 |
+
vae=ottieni_valore_all'indice(vaeloader_80, 0 ),
|
231 |
+
)
|
232 |
+
|
233 |
+
# Salva l'immagine utilizzando il nodo SaveImage con un semplice prefisso di stringa
|
234 |
+
salvato = salvaimmagine.salva_immagini(
|
235 |
+
prefisso_filename= "Chroma_Generated" ,
|
236 |
+
immagini=ottieni_valore_all'indice(vaedecode_79, 0 ),
|
237 |
+
)
|
238 |
+
|
239 |
+
# Restituisce il percorso all'immagine salvata
|
240 |
+
saved_path = f"output/ {saved[ 'ui' ][ 'immagini' ][ 0 ][ 'nomefile' ]} "
|
241 |
+
restituisci saved_path
|
242 |
+
|
243 |
+
# Crea l'interfaccia Gradio
|
244 |
+
con gr.Blocks() come app:
|
245 |
+
gr.Markdown( """
|
246 |
+
# Croma
|
247 |
+
Modello: [Chroma](https://huggingface.co/lodestones/Chroma) di [lodestones](https://huggingface.co/lodestones)
|
248 |
+
Esegui qualsiasi flusso di lavoro ComfyUI su Spaces: [Flussi di lavoro ComfyUI](https://huggingface.co/blog/run-comfyui-workflows-on-spaces)
|
249 |
+
Spazio Autore: [GitHub](https://github.com/gokayfem) | [X.com](https://x.com/gokayfem)
|
250 |
+
""" )
|
251 |
+
|
252 |
+
con gr.Row():
|
253 |
+
con gr.Column():
|
254 |
+
prompt = gr.Textbox(
|
255 |
+
etichetta= "Richiesta" ,
|
256 |
+
placeholder= "Inserisci qui il tuo messaggio..." ,
|
257 |
+
linee= 3
|
258 |
+
)
|
259 |
+
negative_prompt = gr.Textbox(
|
260 |
+
etichetta= "Prompt negativo" ,
|
261 |
+
placeholder= "Inserisci qui il prompt negativo..." ,
|
262 |
+
valore = "bassa qualità, brutto, incompiuto, sfocato, deformato, sfigurato, sfocato, macchiato, tavolozza limitata, colori piatti" ,
|
263 |
+
linee= 2
|
264 |
+
)
|
265 |
+
|
266 |
+
con gr.Row():
|
267 |
+
larghezza = gr.Slider(
|
268 |
+
minimo= 512 ,
|
269 |
+
massimo= 2048 ,
|
270 |
+
valore= 1024 ,
|
271 |
+
passo= 64 ,
|
272 |
+
etichetta= "Larghezza"
|
273 |
+
)
|
274 |
+
altezza = gr.Slider(
|
275 |
+
minimo= 512 ,
|
276 |
+
massimo= 2048 ,
|
277 |
+
valore= 1024 ,
|
278 |
+
passo= 64 ,
|
279 |
+
etichetta= "Altezza"
|
280 |
+
)
|
281 |
+
|
282 |
+
con gr.Row():
|
283 |
+
passi = gr.Slider(
|
284 |
+
minimo= 1 ,
|
285 |
+
massimo= 50 ,
|
286 |
+
valore= 26 ,
|
287 |
+
passo= 1 ,
|
288 |
+
etichetta= "Passaggi"
|
289 |
+
)
|
290 |
+
cfg = gr.Slider(
|
291 |
+
minimo= 1 ,
|
292 |
+
massimo= 20 ,
|
293 |
+
valore= 4 ,
|
294 |
+
passo = 0,5 ,
|
295 |
+
etichetta= "Scala CFG"
|
296 |
+
)
|
297 |
+
seme = gr.Numero(
|
298 |
+
valore=- 1 ,
|
299 |
+
etichetta= "Seme (-1 per casuale)"
|
300 |
+
)
|
301 |
+
|
302 |
+
generate_btn = gr.Button( "Genera" )
|
303 |
+
|
304 |
+
con gr.Column():
|
305 |
+
output_image = gr.Image(label= "Immagine generata" )
|
306 |
+
|
307 |
+
generate_btn.click(
|
308 |
+
fn=genera_immagine,
|
309 |
+
input=[prompt, negative_prompt, larghezza, altezza, passaggi, cfg, seed],
|
310 |
+
output=[immagine_output]
|
311 |
+
)
|
312 |
+
|
313 |
+
# Aggiungi sezione esempi
|
314 |
+
gr.Esempi(
|
315 |
+
esempi=ESEMPI,
|
316 |
+
input=[prompt, negative_prompt, larghezza, altezza, passaggi, cfg, seed],
|
317 |
+
output=[immagine_output],
|
318 |
+
fn=genera_immagine,
|
319 |
+
esempi_cache= Vero ,
|
320 |
+
label= "Esempi di prompt: fai clic per provare!"
|
321 |
+
)
|
322 |
+
|
323 |
+
se __nome__ == "__principale__" :
|
324 |
+
app.launch(share= True )
|