-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathm8ax_gpu_sd.py
More file actions
4269 lines (4251 loc) · 194 KB
/
Copy pathm8ax_gpu_sd.py
File metadata and controls
4269 lines (4251 loc) · 194 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
##################################################################################################################################################################################################################################
#
# Programa En Python Creado Por MARCOS OCHOA DIEZ - M8AX - MvIiIaX - https://youtube.com/m8ax - https://oncyber.io/@m8ax
# Programa Para Crear Imágenes Mediante Stable Diffusion, Una Inteligencia Artificial Generadora De Imágenes. Las Imágenes Pueden Generarse Mediante GPU AMD, En El Caso De Este Programa En Python O Mediante CPU. -gp 1 = GPU, -gp 0 = CPU. Por Defecto, Se Usará GPU.
# En Mi Caso Lo He Probado En La GPU Integrada Del Propio AMD RYZEN 4800H Y Consigue Multiplicar La Velocidad Por 2.45, Con Respecto A Usar La CPU, Para La Generación De Imágenes Y No Es Cualquier CPU... 🤣
#
# --------------------------------------------------------------------------
# ------ Bienvenid@ A Stable Diffusion Para GPU'S AMD, O CPU'S x86-64 ------
# ------ Se Recomiendan 16GB De VRAM O 16GB De RAM Si Sólo Usamos CPU ------
# ------ Resoluciones - 256, 320, 384, 448, 512 576 640 704 768 832 ------
# ------ 896, 960, 1024, 1088, 1152, 1216, 1280, Etc. ------
# ------ Ejemplos: 512x256, 512x512, 512x768, 256x512, 960x1024... ------
# ------ A Resoluciones Más Altas Más RAM O VRAM Se Necesitará ------
# ------ Si El Programa Crashea, Posiblemente Sea La Falta De Memoria ------
# --------------------------------------------------------------------------
# ------------------YouTube - https://youtube.com/m8ax-------------------
# ------------------My Art NFT - https://oncyber.io/@m8ax-------------------
# --------------------------------------------------------------------------
#
# Ejemplo 1 - py m8ax_gpu_sd.py --help
#
# Muestra Los Comandos Que Se Pueden Añadir En La Linea De Comandos...
#
# Ejemplo 2 - py m8ax_gpu_sd.py -p "red monster with hat" -np "low quality"
#
# Crea Imágen De 512X512 Con 25 Pasos Por Defecto, Escala Por Defecto También A 7.5, Semilla Aleatoria Y Crea Solo Una Imágen... Imágen Que Concuerde Con -p Y -np. Buscar Negative Prompt Y Prompt En Google, Para Más Información.
#
# Ejemplo 3 - py m8ax_gpu_sd.py -p "red monster with hat" -w 512 -h 512 -st 20 -g 7 -s 5000000 -c 5
#
# Crea 5 Imágenes De 512X512 Con 20 Pasos, Escala A 7, 5000000 De Semillas... Al Añadir El Comando -c 5, Las Semillas Seran En Cada Imágen Aleatorias Aunque Esté Una Especificada... -c 5 = Crear 5 Imágenes.
# Al Crear Varias Imágenes Si Los Valores De -st y -g Están Especificados, Solo Las Semillas Serán Aleatorias Y Si No Están Especificados, Serán Los De Por Defecto, Salvo Un Caso Concreto...
# Si -st Es 0, Steps Seran Aleatorios De 20 A 125. Si -g Es 0, Escala Será Aleatoria De 6.5 A 20.5.
# Si -c Es 0, Se Crearán Solo 10 Imágenes, Cualquiero Otro Número Generará La Cantidad Indicada De Imágenes, No Especificar El Comando, Solo Creará Una Imágen...
#
# ATENCIÓN... 18 NUEVAS OPCIONES BRUTALES:
# ///// NOTA IMPORTANTE --- -p ".....", Ya No Es Obligatorio, A No Ser Que Queramos, Ya Que Con Otras Opciones De La Línea De Comandos Podemos Generar Prompts, Si No Usamos Ningun Prompt
# Ni Usamos La Opción -wo, Ni La Opción -fp, Entonces Sí Que Deberemos Usar -p ".....", Para Que Nos Genere Lo Que Nosotros Queramos, Si Aún Asi No La Usamos El Programa No Explotará
# Sino Que Usará Un Prompt Ya Definido Por Mí. \\\\\
#
#
#
#
#
# 1. Opción -f 5 Por Ejemplo... Creará Al Finalizar, Un Video Con Todas Las Imágenes Generadas, Usando El Codec x264 Formato MP4 Y Un FrameRate De 5 Imágenes Por Segundo...
#
# 2. Opción -wo "Tom Cruise" O -wo "Monster With Black Nose" O -wo "Trees", Buscará En LeXica Art Dicho Parámetro Y Cogerá Un Prompt Aleatorio, Tanto Si Estamos Creando Solo Una
# Imágen Como Varias A La Vez. Si Estamos Creando 500 Cada Una De Ellas Tendra Un Prompt Diferente Pero Con Referencia Al Parametro -wo Que Hemos Puesto. ¿ Mola No ?...
# Si Vamos A Usar Esta Opcion -wo Podemos Usar La Opción -p "hola", Ya Que Es Obligatorio Ponerla... Pero Asi No Tendremos Que Escribir El Prompt Entero, Ya Que Vamos A Usar
# La Opcion -wo En Este Caso... Si Lo Que Queremos Es Un Prompt Específico Indicado Por Nosotros, Entonces No Tendremos Que Usar La Opcion -wo Y La Opción -p Tendrá Que Tener Un
# "Prompt Detallado", Ya Sabeis -p "Detalles De Prompt"... Espero Que Sea Fácil De Entender...
#
# 3. Opción -j Para, Activarla -j 1, Para No Usarla... No Ponerla Y Ya Está... Esta Opción Lo Único Que Hace, Es Usar Unas Semillas "seed", Entre Imágen E Imágen, Que Varian Muy Poco, Con El Fin
# De Que Las Imágenes Que Se Vayan Generando... Cambien Entre Si En Alguna Cosita, Pero No Mucho, Con La Meta De Que Si Ponemos La Opcion -f 25 Y Creamos Las Sufucientes Imagenes, Como Para
# Que El Video Dure Unos 5 Segundos... Estamos Hablando De 125 Imágenes... Pueden Salir Cosas Chulas... Pero Ya Os Digo Que Es Experimental... Pero Lo Mismo Hace Cosas Guapas...
#
# 4. Opción -z Para Activarla -z 1, Para No Usarla... No Ponerla Y Ya Está... Si Está Activada, Al Finalizar Todos Los Procesos De Generación De Imágenes, Se Creará Un Fichero 7Z, Con Todo.
#
# 5. Opción -t Para Activarla -t 1, Para No Usarla... No Ponerla Y Ya Está... Si Está Activado, Se Habilitará El Modo TTA Para Escalar La Imágen x4, Mucho Más Lento, Pero Más Calidad.
# Si No Usamos Esta Opción La Imágen También Se Escalará x4, Pero Con Una Calidad Menor, Pero Aún Así, De Bastante Más Calidad Que Cualquier Escalado Normal... -fx Debe Estar A 1 Para
# Que -t 1, Tenga Efecto. De Lo Contrario, Se Hará El Escalado x4 Rápido Y De Menos Calidad.
# Requiere De https://github.com/nihui/realsr-ncnn-vulkan/releases Para Que Funcione Este Programa De Python. Más Abajo, En Notas Importantes, Teneis Instrucciones Sobre En Que Directorio Grabarlo
# Para Que Todo Fluya Correctamente. Versión Probada En Este Programa, La Release 20220728.
#
# . if os.path.isfile("..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe"): - Comprueba Si Existe realsr-ncnn-vulkan.exe
# . os.system(f"..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i BenchCPU.PnG -o 4X-BenchCPU.png -v -m models-DF2K -g -1 -j 8:16:8") - Escala Imágen x4 Usando CPU
# . os.system("..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i BenchGPU.PnG -o 4X-BenchGPU.png -v -m models-DF2K -j 8:16:8") - Escala Imágen x4 Usando GPU
# . if os.path.isfile("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe"): - Comprueba Si Existe realsr-ncnn-vulkan.exe
# . os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -v -j 8:16:8") - Escala Imágen x4, Usando GPU
# . os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -g -1 -v -j 8:16:8") - Escala Imágen x4, Usando CPU
# . os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -v -x -j 8:16:8") - Escala Imágen x4, Modo TTA, Usando GPU
# . os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -g -1 -v -x -j 8:16:8") - Escala Imágen x4, Modo TTA, Usando CPU
#
# 6. -fp "Archivo.txt", Archivo.txt Puede Ser Cualquier Fichero De Texto, También Una Ruta, Lo Indicaremos En La Línea De Comandos, Como Todos Los Anteriores. En Archivo.txt, Meteremos Un Prompt Por Línea
# Puede Servirnos Para, Crear Videos Con El Comando -f 25, Recordad 25, Son Los FPS Que Queramos Que Tenga El Video Generado. A Lo Que Iba, Puede Servirnos Para Meter En El Fichero De Texto
# Un Prompt Por Linea, Como Si Estuviéramos Describiendo Una Película O Una Historieta Con Ligeros Cambios En Cada Linea De Promts Y A ver Que Sale De Ahí... Esta Opción Intenta Hacer Algo
# Parecido A La Opcion -j Pero Creo Que Con Mejores Resultados, Ni La He Probado Aún... Confío... xD... Al Incluir Esta Opción En La Línea De Comandos, Solo Funcionaran, Aunque Esten Otros
# Comandos... El Comando -w, -h, El Propio -fp, -f, -z, -t ( Si -fx 1 ), -bw, -fx, -ei, -mt, -tl, -ts, -co Y -gp. Los Demás Comandos Quedarán Anulados... El Propio Programa Generará Semillas, Escala, Pasos, Etc...
#
# 7. -fx 1, Activará La Opción De Multiplicar La Resolución x4 Usando RealEsrgan, Si Esta Opción No Está Puesta A 1, La Opción -t 1, No Tendrá Efecto, Porque Para Ampliar La Imágen, No Usaremos
# RealEsrgan, Sino Que Usaremos Un Metodo Más Rápido Pero De Menor Calidad. Si No Usamos La Opción -fx 1, La Opción Por Defecto Será No Usar RealEsrgan Para El Escalado...
#
# 8. -bw 1, Activará La Salida De Imágenes En Blanco Y Negro, También El Video.
#
# 9. -ei 1, Al Terminar De Generar Una Imágen, La Mostrará En Pantalla, Además También Nos Mostrará Los 10 Colores Predominantes En La Imágen Y El HistoGrama. Así Con Todas. Si Esta Opción
# Está Habilitada, Al Finalizar Todo, Nos Preguntará Si Queremos Hacer Un Video Con La Propia Imágen + Predominancia De Color + HistoGrama, De Todas Las Imágenes Que Hemos Generado En La Sesión.
#
# 10. -mt "Texto No Muy Largo +/- 10 Caracteres", En Cada Imágen, Incluiremos El Texto Indicado, En La Parte Inferior Izquierda, Con El Color Del Texto Aleatorio En Cada Imágen.
#
# 11. -gp 1, La Generación De La Imágen Estará A Cargo De La GPU. -gp 0, La Generación De La Imágen Estará A Cargo De La CPU, Más Lento. Por Defecto, Si No Usamos Este Comando, Se Usará La GPU.
#
# 12. -bm 1, Hace Un BenchMark. Primero Genera Una Imágen Con La CPU Y Luego Con La GPU, Con Los Mismos Pasos, Semillas, Prompt, Etc... Y Nos Dice El Tiempo De Cálculo Tanto De La CPU, Como De La GPU
# Así Como Alguna Que Otra Estadística Más. -bm 1, No Necesita Ningún Parámetro Más, Ya Que Está Preconfgurado Ya, Con Un Prompt, Semillas, Pasos, Etc...
#
# 13. -sc 0, -sc 1, -sc 2, -sc 3, -sc 4, -sc 5, -sc 6. Selecciona El Algoritmo De Cálculo De La Imágen. 0=ddpm, 1=ddim, 2=pndm, 3=lms, 4=euler_anc, 5=euler, 6=dpm.
# Información - https://huggingface.co/docs/diffusers/index
#
# 14. -tl 1, Activará La Creación De Un TimeLapse, Con Esta Opción Activada, El Programa Creará Una Captura De Pantalla Cada 5 Segundos Y Cuando Todo El Proceso De Creación De Imágenes Termine
# Creará Un Video A 20 Fps Con Todas Las Capturas... Más O Menos Unas 720 Capturas Por Hora, +/- 36 Segundos De Video Por Hora A 20 Fps.
# Los Fps Del Video Se Pueden Cambiar Modificando La Variable fpstimlap, Y Los Segundos Entre Capturas, Modificando La Variable esperatimel.
# No Se Creará Ningun TimeLapse Si -bm 1, Si BenchMark Está Activado... No Hay TimeLapse.
#
# 15. -co 1, Activará La Salida De Consola A Fichero De Texto M8AX-Log-Fecha-Hora.LoG, El Cuál Se Grabará En El Directorio Raíz De Nuestro Virtual Environment. Por Defecto Está Desactivado.
#
# 16. -ts 1, Activara TTS, El Ordenador Nos Dirá A Viva Voz - ( Text To Speech ), Algunos De Los Datos, Que El Programa Vaya Generando, Tiempo Restante Para Acabar, Número De Imágenes Generadas
# Y Cosas Por El Estilo. Por Defecto, Está Desactivado, Para Activarlo, -ts 1. Ralentiza Algo La Generación De Imágenes, Porque Para El Programa, Para Hablar.
#
# 17. -ip "1977-50,60,80-0". Formato -ip "Num_ComiEnzo-RGB_Color-Num". Ejemplo: -ip "1-15,120,75-3". Sirve Para Pintar Píxeles Primos En Imágenes, Los Píxeles De La Imágen Comenzarán Por El Número Que Pases
# Con La Opción -ip. Es Decir, Si Le Damos El Número 997, Que Sabemos Que Es Un Número Primo, El Pixel Número 1 De La Imágen Estara Pintado, El Siguiente No, Porque Sería El 998 Y 998 No Es Primo...
# El Color RGB, Cada Color Separado Por Una , Y El Último Número... Si Es 0, Número De Comienzo, El Especificado Y El Color También. Si Ponemos 1, El Número Será El Especificado Y El Color Aleatorio, Pero Todos Iguales En Color.
# Si 2, Número Aleatorio Y Colores Aleatorios, Cada Pixel Primo De Un Color. Si 3, Número Aleatorio Y Colores También. Si 4, Número Aleatorio, Pero Respeta El Color Que Hemos Puesto Nosotros.
# Si 5, Número Aleatorio Y Color Aleatorio, Pero Todos El Mismo Color En Cada Imágen. Si 6, Número Especificado Y Color También, Pero Nos Añadirá También, En Color Amarillo, Los Píxeles Que Correspondan A Números Primos Gemelos...
# Obviamente... Empezando Desde El Número Que Nosotros Le Hemos Indicado... Así Que Habrá Que Elegir Un Color Diferente Al Amarillo, Para Poder Distinguirlos Correctamente.
#
# 18. -ca "2023". Con Esta Opción, En La Parte Superior Izquierda De La Imágen Generada, Se Mostrará El Calendario Anual De 2023, Pero Si Pones Cualquier Año, Se Mostrará El Calendario Del Año Que Pongas. Ejemplo: -ca "2032", Se Mostrará
# En La Imágen Generada, El Calendario Anual De 2032. Si No Pones Esta Opción, Pues No Se Mostrará El Año En La Imágen...
#
#
#
#
# EJEMPLOS:
# 1. py m8ax_gpu_sd.py -p "red monster" -w 256 -h 256 -st 0 -g 0 -s 50000 -c 100 -f 5 -wo "amd cpu" -j 1
#
# -p "red monster" Se Anula, Porque Hemos Añadido -wo "amd cpu" Y Esta Opción, Nos Genera Prompts Aleatorios Que Tengan Que Ver Con "amd cpu". ( REQUIERE INTERNET LA OPCIÓN -wo )
# Para La Busqueda De Prompts. Sino Usamos Dicha Opción, Podemos Quitar Internet... xD...
# -w y -h A 256 Creará Cada Imágen Con Una Resolución De 256X256. -st A 0, En Cada Imágen Generada Se Usará Steps Aleatorios De 20 A 125... Es Decir, Una Imágen Puede Crearse Con
# 20 Steps Y Otra Con 45. La Opción -g a 0, Más De Lo Mismo Pero En Este Caso Los Valores Aleatorios, Se Tomarán Desde 6.5 A 20.5. -g Es Escala. -s 50000, Semillas Anuladas, Porque En La Opción
# -c Hemos Puesto 100 Y Como Es Más De Una Imágen, Entonces Usaremos Un Seed Diferente, Para Que Las Imágenes No Se Parezcan Mucho... Pero Como Hemos Puesto La Opción -j A 1, Estamos
# A Su Vez Indicando Que No Queremos Mucha Variación En Los Seed, Porque Queremos Hacer Un Video De Las Imágenes Generadas Y Queremos Que Se Parezcan Algo Las Imágenes Para Hacer Un Video
# Porque La Opción -f Está A 5 Y Esto Indica Que Queremos Hacer Un Video A 5 Fps De Las 100 Imágenes -c 100... Espero Que Se Entienda Lo Que He Explicado...
#
# 2. py m8ax_gpu_sd.py -p "red monster" -st 15 -g 7 -s 50000 -f 5
#
# Creará Una Imágen Con El Prompt Red Monster Con 15 Pasos, Escala 7, 50000 Semillas Y Al Final Creará Un Video De La Imágen A 5 Fps.. Lo Cuál Es Una Tonteria... La Opción -f Está
# Pensada Para Cuando Generemos Más Imágenes.
#
# 3. py m8ax_gpu_sd.py -p "red monster" -wo "Julia Roberts" -c 100 -j 1 -f 25
#
# Todos Los Parámetros Por Defecto 512x512, Steps 25, Escala 7.5 Y Semillas Seed, Aleatorias... Crea Una Imágen Con Un Prompt De Lexica Art, Que Tenga Que Ver Con Julia Robets. Red Monster
# Queda Anulado... También Hara Un Video A 25 Fps, Con Las Imágenes Generadas.
#
# 4. py m8ax_gpu_sd.py -p "red monster" -c 200 -f 5 -tl 1
#
# 200 Imágenes De 512x512 Con Escala A 7.5, Steps A 25 Y Semillas Aleatorias. Hará Un Video A 5 Fps, Con Las Imágenes Generadas Y También Hará Un TimeLapse Con Todo El Proceso De Cálculo. Una Captura Cada 5s Y Al Terminar Hará El Video
# A 20 Fps, El Cuál Se Grabará En M8AX-Imágenes_Finales\Sesion --- Fecha-Hora.
#
# 5. py m8ax_gpu_sd.py -p "red monster" -st 20 -g 0 -s 5000 -bw 1 -ca "2023"
#
# Crea Una Imágen Calculada Mediante 20 Pasos, Con Escala Aleatoria, 5000 Semillas, En Blanco Y Negro, Con El Prompt Red Monster Y De 512x512 De Resolución, Además Se Imprimirá En La Imágen, En La Parte Superior Izquierda, El Calendario
# Del Año 2023.
#
# 6. py m8ax_gpu_sd.py -w 512 -h 512 -fp "Fichero.txt" -f 25 -t 1 -z 1 -fx 1
# Genera Un Video A 25 Fps De 2048x2048, Ya Que Siempre Multiplicamos La Resolución x4, Con RealEsrgan En Este Caso, -fx 1, Con El Contenido Del Fichero De Texto, Un Prompt Por Línea, Que Tengamos En El Fichero
# Fichero.txt, Recordad... Un Prompt Por Línea Y Además Usará La Opción TTA De Escalado, Más Lento... -t 1 Y Cuando Todo Finalize Lo Comprimirá Todo En Un Fichero 7z, Listo Para Transportar
# Y Enseñar A Los Colegas...
#
# 7. py m8ax_gpu_sd.py -wo "portrait" -ei 1 -mt "m8ax" -gp 0 -sc 1 -co 1
# Generará Una Imágen Con Un Prompt Sacado De Lexica Art, Que Contenga La Palabra Portrait, De 512 x 512, Con 25 Pasos, 7.5 De Escala Y Semillas Aleatorias Y Además En La Parte Inferior Izquierda
# Incrustará En La Imágen El Texto m8ax Con Un Color Aleatorio. Usará La CPU Y No La GPU, Para La Generación De La Imágen Y El Algoritmo De Generación DDIM Y Como -co 1, Toda La Salida De La Consola
# Se Grabará En Un Fichero De Texto.
#
# 8. py m8ax_gpu_sd.py -bm 1 -ts 1
# Hará Un BenchMark Tanto En CPU, Como En GPU Y Presentará Resultados... La Opción -bm 1 Si La Ponemos Anulará Todas Las Que Esten Puestas... Se Ejecutará Solo El BenchMark. Bueno, -ts 1 Se Puede
# Poner Y Nos Dirá Por Voz Alguna Cosilla.
#
# 9. py m8ax_gpu_sd.py -w 512 -h 768 -gp 0 -p "a detailed portrait" -c 5 -ip "1977-25,175,90-0"
# Generará 5 Imágenes A Una Resolución De 512 X 768, Usando La CPU Con El Prompt "a detailed portrait". Como La Opción -ip, Esta Puesta, A Cada Imágen Generada, Se Le Pintarán Los Píxeles Primos.
# Teniendo En Cuenta Que Le Hemos Pasado El Número 1977 Como Inicio, El Pixel Número 1 En La Imágen, Comenzará Desde 1977 Hasta Que Se Acaben Los Píxeles De La Imágen Y Como Hemos Puesto Un 0
# Al Final Pues Nos Respetará El Número De Inicio Y El Color Para Pintar Los Píxeles Primos Indicado. Teneis Más Ayuda Sobre Este Comando, En Las Opciones Brutales, Punto 17.
#
#
#
#
#
# ESPERO QUE CON ESTOS EJEMPLOS, SE ENTIENDA BIEN EL FUNCIONAMIENTO DE ESTE PROGRAMA...
#
#
#
# NOTAS IMPORTANTES:
#
# - El Programa En El Directorio De Trabajo, Donde Crea Las Imágenes Y Demás También Crea Un Fichero TXT Con Los Prompts Usados En Cada Imágen, El Ritmo De Generación De Imágenes Por
# Hora, Minuto Y Segundo, Etc...
#
# - En El Directorio Raíz De Nuestro Virtual Environment Se Creará El Fichero M8AX-PromptS.TxT, En El Cuál Se Irán Grabando Todos Los Prompts, Que Usemos, Tanto Aleatorios Como Nuestros Propios.
#
# - El Directorio De Trabajo Es M8AX-Imágenes_Finales, Se Creará Automáticamente Y Es Ahí, Donde Todo El Trabajo Quedará Grabado, Datos De BenchMark, Imágenes, Videos, Ficheros 7Z, Etc...
#
# - Al Finalizar Todo El Trabajo, Si Hemos Indicado En La Línea De Comandos, Que Queremos Un Video... El Video Se Reproducirá Al Terminar El Proceso De Forma Automática Y En Modo Loop.
#
# - Como Nota, En Mi Portátil, Que Lleva Un Ryzen 4800h Con La GPU Integrada, La GPU Genera Imágenes De 512x512 Con 25 Steps Por Imágen A Un Ritmo De 29.5 Imágenes Por Hora... Y La CPU Con
# Sus 8 Cores Del Ryzen 4800h A Pleno Rendimiento... 12 Imágenes Por Hora, Por Lo Que Estamos Hablando De 2.45X Más Rápido. No Está Mal...
#
# Las Líneas De Código:
#
# - elecciongpu = ('DmlExecutionProvider', {'device_id': 0,})
#
# . Si Tienes 2 GPUS AMD, Por Ejemplo, La Integrada En La CPU Y Otra Externa Más Potente 0 = GPU Interna 1 = GPU Externa.
# . Si Tienes Una GPU Interna En La CPU Intel Y Otra Externa AMD, Poner 1.
# . Si Solo Tienes Una GPU AMD, Dejarlo En 0.
#
# - if os.path.isfile("..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe"): - Comprueba Si Existe realsr-ncnn-vulkan.exe
# - os.system(f"..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i BenchCPU.PnG -o 4X-BenchCPU.png -v -m models-DF2K -g -1 -j 8:16:8") - Escala Imágen x4 Usando CPU
# - os.system("..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i BenchGPU.PnG -o 4X-BenchGPU.png -v -m models-DF2K -j 8:16:8") - Escala Imágen x4 Usando GPU
# - if os.path.isfile("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe"): - Comprueba Si Existe realsr-ncnn-vulkan.exe
# - os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -v -j 8:16:8") - Escala Imágen x4, Usando GPU
# - os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -g -1 -v -j 8:16:8") - Escala Imágen x4, Usando CPU
# - os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -v -x -j 8:16:8") - Escala Imágen x4, Modo TTA, Usando GPU
# - os.system("..\\..\\Real-ESRGAN\\realsr-ncnn-vulkan.exe -i Fin.PnG -o Fin-2.png -m models-DF2K -g -1 -v -x -j 8:16:8") - Escala Imágen x4, Modo TTA, Usando CPU
#
# . Para Poder Activar La Opción De Aumentar El Tamaño De La Imágen Por Cuatro Mediante RealEsrgan, Debereis Descargar
# Desde Aquí El Programa, https://github.com/nihui/realsr-ncnn-vulkan/releases Y Descomprimirlo En
# Vuestro Virtual Environment, En El Directorio Principal, En La Carpeta Real-ESRGAN. Versión Probada En Este Programa, La Release 20220728.
# . Por Defecto Si La Opción -fx No La Usais, No Os Dara Error Y Si La Usais Y No Teneis Descargado RealEsrgan, Tampoco Os Dará Error Y Utilizará
# Un Escalado x4 Normal De La Imágen, Pero Os Lo Recomiendo, Ya Que La Calidad Del Escalado Es Mucho Mejor Y El BenchMark -bm 1, También Lo Utiliza
# Para Hacer Un BenchMarkY Más Detallado. De Todas Formas, El Programa Se Puede Usar Perfectamente Sin RealEsrgan, Pero Os Lo Recomiendo...
#
##################################################################################################################################################################################################################################
#
# By M8AX On December 28 2022 00:00h
#
# Programado En Ryzen 4800H Con 32Gb RAM
#
# KUU G3 PRO Laitnin
#
# 27H De Programación
#
# M A R C O S O C H O A D I E Z
#
##################################################################################################################################################################################################################################
from os import remove
from win32api import GetSystemMetrics
from PIL import Image, ImageChops, ImageEnhance, ImageOps, ImageDraw, ImageFont
from PIL.PngImagePlugin import PngInfo
from diffusers import OnnxStableDiffusionPipeline
from datetime import datetime, timedelta
from os import rmdir
from shutil import rmtree
from sklearn.cluster import KMeans
from diffusers import (
DDPMScheduler,
DDIMScheduler,
PNDMScheduler,
LMSDiscreteScheduler,
EulerDiscreteScheduler,
EulerAncestralDiscreteScheduler,
DPMSolverMultistepScheduler,
)
import os
import errno
import time
import qrcode
import curses, random
import climage
import math
import sympy
import click
import calendar
import multiprocessing
import shutil
import numpy as np
import matplotlib.pyplot as plt
import sys
import cv2
import pyttsx3
import pathlib
import py7zr
import sys
import enum
import glob
import requests
import pandas as pd
import msvcrt
import pyautogui
@click.command()
@click.option(
"-gp",
"--gpu",
required=False,
type=int,
default=1,
help=(
"Activa O Desactiva El Uso De GPU, Para La Generación De La Imágen. Si 1, Solo"
" GPU, Si 0, Solo CPU, Más Lento. Valores 1 Ó 0. Ejemplo: -gp 1"
),
)
@click.option(
"-p",
"--prompt",
required=False,
type=str,
help=(
"Lo Que Queremos Que Stable Diffusion Nos 'Dibuje'. Ejemplo: Las ' Son Comillas"
" Shift+2. -p 'Red Car'"
),
)
@click.option(
"-np",
"--negp",
required=False,
type=str,
help=(
"Lo Que No Queremos Que Nos 'Dibuje'. Ejemplo: Las ' Son Comillas Shift+2. -np"
" 'car'"
),
)
@click.option(
"-w",
"--width",
required=False,
type=int,
default=512,
help="Ancho De La Imágen En Pixels. Ejemplo: -w 512",
)
@click.option(
"-h",
"--height",
required=False,
type=int,
default=512,
help="Alto De La Imágen En Pixels. Ejemplo: -h 512",
)
@click.option(
"-sc",
"--sched",
required=False,
type=int,
default=None,
help=(
"Algoritmo A Usar. -sc 0 = ddpm, -sc 1 = ddim, -sc 2 = pndm, -sc 3 = lms, -sc 4"
" = euler_anc, -sc 5 = euler, -sc 6 = dpm. Ejemplo: -sc 4. Si No Se Pone Este"
" Parámetro, Por Defecto Se Usará Euler Ancestral, Osea -sc 4"
),
)
@click.option(
"-wo",
"--word",
required=False,
type=str,
help=(
"Genera Imágenes Con Prompts Aleatorios De Lexica Art, Le Pasamos Un Texto Y"
" Busca Prompts En Lexica Art, Que Tengan Que Ver Con El Texto Pasado. Ejemplo:"
" Las ' Son Comillas Shift+2. -wo 'Kate Mara'"
),
)
@click.option(
"-fp",
"--filepro",
required=False,
type=str,
help=(
"Cogerá Los Prompts Desde Un Fichero De Texto. Un Prompt Por Línea. Ejemplo:"
" Las ' Son Comillas Shift+2. -fp 'Archivo_TXT_Prompts.txt'"
),
)
@click.option(
"-mt",
"--mtext",
required=False,
type=str,
help=(
"Incrustaremos En Cada Imágen, En La Parte Inferior Izquierda, Nuestra Marca De"
" Agua. Ejemplo: Las ' Son Comillas Shift+2. -mt 'M8AX'"
),
)
@click.option(
"-ca",
"--calend",
required=False,
type=str,
help=(
"Incrustaremos En Cada Imágen, En La Parte Superior Izquierda, El Calendario"
" Anual Que Le Pasemos. Ejemplo: Las ' Son Comillas Shift+2. -ca '2025'"
),
)
@click.option(
"-bw",
"--blane",
required=False,
type=int,
default=None,
help=(
"Todas Las Imágenes Generadas Y El Video, Serán En Blanco Y Negro. Valores 1 Ó"
" 0. Ejemplo: -bw 0"
),
)
@click.option(
"-ip",
"--impr",
required=False,
type=str,
default="",
help=(
"Formato -ip 'Num_ComiEnzo-RGB_Color-Num'. Ejemplo: -ip '1-15,120,75-3'. Sirve"
" Para Pintar Píxeles Primos En Imágenes, Los Píxeles De La Imágen Comenzarán"
" Por El Número Que Pases Con La Opción -ip. Es Decir, Si Le Damos El Número"
" 997, Que Sabemos Que Es Un Número Primo, El Pixel Número 1 De La Imágen"
" Estara Pintado, El Siguiente No, Porque Sería El 998 Y 998 No Es Primo... El"
" Color RGB, Cada Color Separado Por Una , Y El Último Número... Si Es 0,"
" Número De Comienzo, El Especificado Y El Color También. Si Ponemos 1, El"
" Número Será El Especificado Y El Color Aleatorio, Pero Todos Iguales En"
" Color. Si 2, Número Aleatorio Y Colores Aleatorios, Cada Pixel Primo De Un"
" Color. Si 3, Número Aleatorio Y Colores También. Si 4, Número Aleatorio, Pero"
" Respeta El Color Que Hemos Puesto Nosotros. Si 5, Número Aleatorio Y Color"
" Aleatorio, Pero Todos El Mismo Color En Cada Imágen. Si 6, Número"
" Especificado Y Color También, Pero Nos Añadirá También, En Color Amarillo,"
" Los Píxeles Que Correspondan A Números Primos Gemelos, Obviamente..."
" Empezando Desde El Número Que Nosotros Le Hemos Indicado... Así Que Habrá Que"
" Elegir Un Color Diferente Al Amarillo, Para Poder Distinguirlos"
" Correctamente."
),
)
@click.option(
"-fx",
"--reales",
required=False,
type=int,
default=None,
help=(
"Habilita El Escalado De Imágen X4, Utilizando RealEsrgan. Valores 1 Ó 0."
" Ejemplo: -fx 0"
),
)
@click.option(
"-t",
"--tta",
required=False,
type=int,
default=None,
help=(
"Habilita El Modo De Escalado De Imágen TTA, Muy Lento, Solo Si -fx 1. Valores"
" 1 Ó 0. Ejemplo: -t 0"
),
)
@click.option(
"-ei",
"--mimag",
required=False,
type=int,
default=None,
help=(
"Por Cada Imágen Generada, Nos La Muestra JuntO Con La Predominancia De Color Y"
" Su HistoGrama, Si Valor 1, Si Valor 0, No. Valores 1 Ó 0. Ejemplo: -ei 0"
),
)
@click.option(
"-st",
"--steps",
required=False,
type=int,
default=25,
help=(
"Pasos Para Realizar La Imágen, Cuantos Más, Más Lento, Pero Más Calidad."
" Ejemplo: -st 25"
),
)
@click.option(
"-g",
"--guidance-scale",
required=False,
type=float,
default=7.5,
help=(
"Cuanto Más Alto, Más Dibujará Lo Que Queremos, Pero Tendrá Menor Calidad."
" Ejemplo: -g 7.5"
),
)
@click.option(
"-s",
"--seed",
required=False,
type=int,
default=None,
help="Semillas Para La Generación De La Imágen. Ejemplo: -s 10031977",
)
@click.option(
"-j",
"--pseed",
required=False,
type=int,
default=None,
help=(
"Semillas Aleatorias Entre Imágen E Imágen Que Varían Muy Poco. Valores 1 Ó 0."
" Ejemplo: -j 1"
),
)
@click.option(
"-c",
"--cuan",
required=False,
type=int,
default=None,
help="Número De Imágenes Que Queremos. Ejemplo: -c 100",
)
@click.option(
"-f",
"--fps",
required=False,
type=float,
default=None,
help=(
"Fps Del Video A Generar, Habilita La Creación De Video, Con Las Imágenes."
" Ejemplo: -f 30"
),
)
@click.option(
"-tl",
"--tlapse",
required=False,
type=int,
default=None,
help=(
"Crea Un TimeLapse, Mediante Capturas De Pantalla, Realizadas Durante La"
" Generación De Imágenes. Ejemplo: -tl 1"
),
)
@click.option(
"-z",
"--zip",
required=False,
type=int,
default=None,
help=(
"Al Finalizar, Genera Un Fichero 7z, Con Todas Las Imágenes Generadas. Valores"
" 1 Ó 0. Ejemplo: -z 1"
),
)
@click.option(
"-bm",
"--bench",
required=False,
type=int,
default=None,
help=(
"Hará Un BenchMark, Usando Primero La GPU Y Luego La CPU Y Presentará"
" Resultados. Ejemplo: -bm 1"
),
)
@click.option(
"-co",
"--conso",
required=False,
type=int,
default=None,
help=(
"Toda La Salida De Consola, Se Grabará En Un Fichero De Texto, En El Directorio"
" Raiz De Nuestro Virtual Environment. Ejemplo: -co 1"
),
)
@click.option(
"-ts",
"--hablo",
required=False,
type=int,
default=None,
help=(
"El Programa Nos Hablará, ( Text To Speech ), De Algunas Circunstancias Del"
" Programa, Finalización, Tiempo, Etc... Ralentiza Un Poco, Porque Para El"
" Programa Para Hablar. Ejemplo: -ts 1"
),
)
def run(
prompt: str,
filepro: str,
mtext: str,
negp: str,
calend: str,
word: str,
width: int,
mimag: int,
conso: int,
bench: int,
pseed: int,
impr: str,
blane: int,
hablo: int,
tlapse: int,
gpu: int,
sched: int,
zip: int,
reales: int,
tta: int,
height: int,
steps: int,
cuan: int,
fps: int,
guidance_scale: float,
seed: int,
):
os.system("cls")
if impr != "":
try:
impri, colorcete, colaleynum = impr.split(sep="-")
impri = int(impri)
colorc1, colorc2, colorc3 = colorcete.split(sep=",")
colorc1 = int(colorc1)
colorc2 = int(colorc2)
colorc3 = int(colorc3)
colorcete = [colorc3, colorc2, colorc1]
colaleynum = int(colaleynum)
except:
print(
"\nPor Lo Visto... Has Seleccionado Que En La Imágen, Se Pinten Píxeles"
" Primos, Pero Lo Has Especificado Mal, Debes Especificar"
" Así...\nEjemplo: -ip 5-24,56,100-2 Estamos Indicando Que Empiece El"
" Pixel 1 De La Imágen Como Si Fuera El Número 5 Y Se Pintarán Todos"
" Los Píxeles Primos\nA Partir Del Número 5, Con El Color RGB 24,56,100"
" Y El Último 2 Indica Que Obviemos Lo Anterior Y Que Tanto Los"
" Colores\nDe Los Píxeles Como El Número De Comienzo Del Pixel 1 En"
" Cada Imágen, Sea Aleatorio. Así Que... Si Queremos Que Se Cumpla Lo"
" Que Nosotros Queremos, El 2 Del Final, Debe Ser 0.\nOtro Ejemplo: -ip"
" 1000000000-255,0,0-0 El Pixel 1 De La Imágen Sera El Número"
" 1000000000, El Segundo... 1000000001 Y Se Pintarán Los\nQue Sean"
" Primos Y Como Hemos Puesto Al Final Un 0, Pues Se Cumplirá Lo Que"
" Hemos Dicho, Si Fuera Un 2, El Número De Comienzo\nSerá Aleatorio En"
" Cada Imágen Generada Y Los Colores De Los Pixeles También.\n\n- NOTA"
" IMPORTANTE -"
)
print(
"\nEl Número Del Final, Solo Puede Tener Siete Valores, O 0, O 1, O 2,"
" O 3, O 4, O 5, O 6... Los Voy A Explicar Ahora Con Más Detalle, Para"
" Que Se Entiendan..."
)
print(
"\nSi Al Final Ponemos Un 0 - El Número De Comienzo, Será El"
" Especificado Y El Color De Los Píxeles Primos Pintados Será El"
" Especificado Por Tí."
)
print(
"\nSi Al Final Ponemos Un 1 - El Número De Comienzo, Será El"
" Especificado, Pero El Color De Los Píxeles, En Cada Imágen Generada"
" Cambiará, Pero Serán Todos Iguales, Del Mismo Color."
)
print(
"\nSi Al Final Ponemos Un 2 - El Número De Comienzo, Será Aleatorio Y"
" El Color De Cada Pixel Pintado, También, Así En Todas Las Imágenes"
" Generadas."
)
print(
"\nSi Al Final Ponemos Un 3 - El Número De Comienzo, Será El"
" Especificado, Pero El Color De Cada Pixel Pintado Será Aleatorio, Así"
" En Cada Imágen Generada."
)
print(
"\nSi Al Final Ponemos Un 4 - El Número De Comienzo, Será Aleatorio,"
" Pero Se Respeta El Color Que Hemos Elegido, Así... Para Todas Las"
" Imágenes Generadas."
)
print(
"\nSi Al Final Ponemos Un 5 - El Número De Comienzo, Será Aleatorio Y"
" El Color De Cada Pixel En Cada Imágen Generada Cambiará, Pero En Cada"
" Imágen Generada, Todos Serán Del Mismo Color."
)
print(
"\nSi Al Final Ponemos Un 6 - El Número De Comienzo, Será El"
" Especificado Y El Color También, Pero Además... Se Pintarán De Color"
" Amarillo, Los Píxeles Que Coincidan Con Números Primos Gemelos.\n\nSe"
" Pintarán De Amarillo, Así Que Procura Elegir Otro Color, Para Pintar"
" Los Píxeles Primos Y Se Vea La Diferencia..."
)
print("\n\n... Espero Que Todo Este Aclarado Y Comprendido ...\n")
sys.exit(1)
consolacomentada = ""
frase1 = ""
frase2 = ""
frase2a = ""
frase3 = ""
frase4 = ""
frase5 = ""
frase6 = ""
frase7 = ""
frase8 = ""
frase9 = ""
frase10 = ""
frase11 = ""
frase12 = ""
frase13 = ""
frase14 = ""
frase15 = ""
frase16 = ""
frase17 = ""
frase18 = ""
frase19 = ""
grabo = 0
despertot = 0
contandopri = 0
creadire = time.strftime("%d_%m_%y") + "-" + time.strftime("%H_%M_%S")
elecciongpu = (
"DmlExecutionProvider",
{
"device_id": 0,
},
)
fps = 0 if fps is None else fps
zip = 0 if zip is None else zip
pseed = 0 if pseed is None else pseed
reales = 0 if reales is None else reales
blane = 0 if blane is None else blane
tlapse = 0 if tlapse is None else tlapse
conso = 0 if conso is None else conso
sched = 4 if sched is None else sched
hablo = 0 if hablo is None else hablo
calend = "" if calend is None else calend
bench = 0 if bench is None else bench
mimag = 0 if mimag is None else mimag
impr = "" if impr is None else impr
tta = 0 if tta is None else tta
word = "" if word is None else word
mtext = "" if mtext is None else mtext
negp = "" if negp is None else negp
prompt = (
"a gorgeous female, photo of scarlett johansson by helmut newton, realistic,"
" smooth face, perfect eyes, symmetrical, full body shot, wide angle, sharp"
" focus, 8 k high definition, insanely detailed, intricate, elegant, art by"
" greg rutkowski"
if prompt is None
else prompt
)
filepro = "" if filepro is None else filepro
seed = np.random.randint(np.iinfo(np.int32).max) if seed is None else seed
latents = get_latents_from_seed(seed, width, height)
cuan = 1 if cuan is None else cuan
nn = 1
sizetm = 0
tamano2 = 0
tamano3 = 0
esperatimel = 5000
fpstimlap = 20
proc = multiprocessing.Process(target=capturas, args=(nn, esperatimel, creadire))
model = "./stable_diffusion_onnx/scheduler"
ddpm = DDPMScheduler.from_pretrained(model, subfolder="scheduler")
ddim = DDIMScheduler.from_pretrained(model, subfolder="scheduler")
pndm = PNDMScheduler.from_pretrained(model, subfolder="scheduler")
lms = LMSDiscreteScheduler.from_pretrained(model, subfolder="scheduler")
euler_anc = EulerAncestralDiscreteScheduler.from_pretrained(
model, subfolder="scheduler"
)
euler = EulerDiscreteScheduler.from_pretrained(model, subfolder="scheduler")
dpm = DPMSolverMultistepScheduler.from_pretrained(model, subfolder="scheduler")
modocall = [ddpm, ddim, pndm, lms, euler_anc, euler, dpm]
modocale = [
"Denoising Diffusion Probabilistic Models",
"Denoising Diffusion Implicit Models",
"Pseudo Numerical Methods For Diffusion Models On Manifolds",
"Least Mean Square Algorithm",
"Euler Ancestral",
"Euler",
"DPM Solver",
]
if sched > 6 or sched < 0:
sched = 4
modocal = modocall[sched]
try:
rmtree("M8AX-Imágenes_Finales\\M8AX-TimeLapse")
except:
cuan = cuan
try:
os.mkdir("M8AX-Imágenes_Finales")
except OSError as e:
if e.errno != errno.EEXIST:
raise
try:
os.mkdir("M8AX-Imágenes_Finales\\M8AX-TimeLapse")
except OSError as e:
if e.errno != errno.EEXIST:
raise
screen = curses.initscr()
lwidth = screen.getmaxyx()[1]
lheight = screen.getmaxyx()[0]
size = lwidth * lheight
char = [" ", ".", ":", "^", "*", "x", "s", "S", "#", "$"]
b = []
curses.curs_set(0)
curses.start_color()
curses.init_pair(1, 0, 0)
curses.init_pair(2, 1, 0)
curses.init_pair(3, 3, 0)
curses.init_pair(4, 4, 0)
print(
f"--------------------------------------------------------------------------\n"
)
print(
f"------ Bienvenid@ A Stable Diffusion Para GPU'S AMD, O CPU'S x86-64 ------\n"
)
print(
f"------ Se Recomiendan 16GB De VRAM O 16GB De RAM Si Sólo Usamos CPU ------\n"
)
print(
f"------ Resoluciones - 256, 320, 384, 448, 512 576 640 704 768 832 ------\n"
)
print(
f"------ 896, 960, 1024, 1088, 1152, 1216, 1280, Etc. ------\n"
)
print(
f"------ Ejemplos: 512x256, 512x512, 512x768, 256x512, 960x1024... ------\n"
)
print(
f"------ A Resoluciones Más Altas Más RAM O VRAM Se Necesitará ------\n"
)
print(
f"------ Si El Programa Crashea, Posiblemente Sea La Falta De Memoria ------\n"
)
print(
f"--------------------------------------------------------------------------\n"
)
print(
f"------------------YouTube - https://youtube.com/m8ax-------------------\n"
)
print(
f"------------------My Art NFT - https://oncyber.io/@m8ax-------------------\n"
)
print(
f"--------------------------------------------------------------------------\n"
)
print("\x1b[31m... Espera, HAL 9000, Está Pensando ...\n\x1b[0m")
for i in range(size + lwidth + 1):
b.append(0)
colore1 = np.random.randint(1, 10)
colore2 = np.random.randint(1, 10)
colore3 = np.random.randint(1, 10)
while 1:
for i in range(int(lwidth / 9)):
b[int((random.random() * lwidth) + lwidth * (lheight - 1))] = 75
for i in range(size):
b[i] = int((b[i] + b[i + 1] + b[i + lwidth] + b[i + lwidth + 1]) / 4)
color = (
colore1
if b[i] > 15
else (colore2 if b[i] > 9 else (colore3 if b[i] > 4 else 1))
)
if i < size - 1:
screen.addstr(
int(i / lwidth),
i % lwidth,
char[(9 if b[i] > 9 else b[i])],
curses.color_pair(color) | curses.A_BOLD,
)
screen.refresh()
screen.timeout(3)
if screen.getch() != -1:
break
curses.endwin()
if hablo == 1:
dime(
"Bienvenido Al Generador De Imágenes Mediante Inteligencia Artificial,"
" Programado Por M 8 A X..."
)
color = ("b", "g", "r")
if conso == 1:
sys.stdout = open("M8AX-Log-" + creadire + ".LoG", "w", encoding="utf-8")
if bench == 1:
prompt = "a gorgeous photo of an astronaut driving a motorcycle on venus"
negp = "bad hands, blurry, low quality, nude, black and white"
if hablo == 1:
dime("Preparando El BenchMark... No Toques Nada Hasta Que Todo Finalice...")
print("")
sched = np.random.randint(0, 7)
modocal = modocall[sched]
s = requests.Session()
tiempo1 = time.time()
try:
promeleg = np.random.randint(1, 6)
if promeleg == 1:
r = s.get(
"https://lexica.art/api/v1/search?q="
+ "hyperrealistic gorgeous detailed face portrait"
)
if promeleg == 2:
r = s.get(
"https://lexica.art/api/v1/search?q="
+ "hyperrealistic gorgeous detailed face portrait goya"
)
if promeleg == 3:
r = s.get(
"https://lexica.art/api/v1/search?q="
+ "hyperrealistic gorgeous detailed face portrait picasso"
)
if promeleg == 4:
r = s.get(
"https://lexica.art/api/v1/search?q="
+ "a hyperrealistic gorgeous nude female photo, professionally"
" retouched, insanely detailed, perfect eyes, 8k render"
)
if promeleg == 5:
r = s.get(
"https://lexica.art/api/v1/search?q="
+ "a landscape by simon stalenhag of a very large realistic highly"
" detailed imposing robotic mechanical cat"
)
df = pd.json_normalize(r.json()["images"])
longi = np.random.randint(len(df))
prompt = df.prompt[longi]
except:
prompt = prompt
try:
with open("M8AX-PromptS.TxT", "r", encoding="utf-8") as file:
lineas = file.readlines()
grabo = 0
for linea in lineas:
if prompt == linea.strip("\n"):
grabo = grabo + 1
file.close()
except:
grabo = 0
if grabo == 0:
with open("M8AX-PromptS.TxT", "a", encoding="utf-8") as filet:
filet.write(str(prompt) + "\n")
filet.close()
todocorrecto = 1
if conso == 0:
consolacomentada = (
"... Comentario De Consola ...\n\nSe Ejecutará Un BenchMark..."
)
else:
consolacomentada = (
"... Comentario De Consola ...\n\nSe Ejecutará Un BenchMark Y La Salida"
" De Consola Se Grabará En Un Fichero De Texto, En El Directorio Raíz"
" De Vuestro Virtual Environment..."
)
if hablo == 1:
consolacomentada = (
consolacomentada
+ " Además Nos Dirá Por Voz, Como Va El Desarrollo Del BenchMark."
)
consolacomandos = (
"py m8ax_gpu_sd.py"
+ " -gp "
+ str(gpu)
+ " -p "
+ '"'
+ str(prompt)
+ '"'
+ " -np "
+ '"'
+ str(negp)
+ '"'
+ " -w "
+ str(width)
+ " -h "
+ str(height)
+ " -sc "
+ str(sched)
+ " -wo "
+ '"'
+ str(word)
+ '"'
+ " -fp "
+ '"'
+ str(filepro)
+ '"'
+ " -mt "
+ '"'
+ str(mtext)
+ '"'
+ " -ca "
+ '"'
+ str(calend)
+ '"'
+ " -bw "
+ str(blane)
+ " -ip "
+ '"'
+ str(impr)
+ '"'
+ " -fx "
+ str(reales)
+ " -t "
+ str(tta)
+ " -ei "
+ str(mimag)
+ " -st "
+ str(steps)
+ " -g "
+ str(guidance_scale)
+ " -s "
+ str(seed)
+ " -j "
+ str(pseed)
+ " -c "
+ str(cuan)
+ " -f "
+ str(fps)
+ " -tl "
+ str(tlapse)
+ " -z "
+ str(zip)
+ " -bm "
+ str(bench)
+ " -co "
+ str(conso)
+ " -ts "
+ str(hablo)
)
print(f"{consolacomandos}\n\n{consolacomentada}\n")
steps = np.random.randint(200, 301)
width = 512
height = 512
seed = np.random.randint(1003197710) + 1003197719770310
latents = get_latents_from_seed(seed, width, height)