new nodes and fixes

This commit is contained in:
chibiace
2023-10-28 16:14:04 +13:00
committed by GitHub
parent e8b3e69be0
commit 6fcd7ee83e
12 changed files with 1136 additions and 5 deletions
+232 -5
View File
@@ -2,11 +2,23 @@ import torch
import folder_paths
import comfy.sd
import comfy.utils
from comfy.cli_args import args
from PIL import Image, ImageOps
from PIL.PngImagePlugin import PngInfo
import numpy as np
import random
import os
import time
import json
### GLOBALS ###
MAX_RESOLUTION=32768
base_path = os.path.dirname(os.path.realpath(__file__))
models_dir = os.path.join(base_path, "extras")
folder_paths.folder_names_and_paths["chibi-wildcards"] = ([os.path.join(models_dir, "chibi-wildcards")], {".txt"})
class Loader:
@@ -31,15 +43,17 @@ class Loader:
def loader(self, Checkpoint,Vae,stop_at_clip_layer,width,height,batch_size):
ckpt_path = folder_paths.get_full_path("checkpoints", Checkpoint)
output_vae = False
if Vae == "Included":
output_vae = True
ckpt = comfy.sd.load_checkpoint_guess_config(ckpt_path, output_vae=output_vae, output_clip=True, embedding_directory=folder_paths.get_folder_paths("embeddings"))
if Vae == "Included":
vae = ckpt[:3][2]
else:
vae_path = folder_paths.get_full_path("vae", Vae)
vae = comfy.sd.VAE(ckpt_path=vae_path)
vae = comfy.sd.VAE(sd=comfy.utils.load_torch_file(vae_path))
clip = ckpt[:3][1].clone()
clip.clip_layer(stop_at_clip_layer)
@@ -65,8 +79,8 @@ class Prompts:
},
}
RETURN_TYPES = ("CONDITIONING","CONDITIONING",)
RETURN_NAMES = ("Positive Conditioning", "Negative Conditioning")
RETURN_TYPES = ("CONDITIONING","CONDITIONING","CLIP","TEXT","TEXT")
RETURN_NAMES = ("Positive Conditioning", "Negative Conditioning", "CLIP", "Positive Text", "Negative Text")
FUNCTION = "prompts"
CATEGORY = "Chibi-Nodes"
@@ -76,7 +90,7 @@ class Prompts:
pos_cond, pos_pooled = clip.encode_from_tokens(pos_cond_raw, return_pooled=True)
neg_cond, neg_pooled = clip.encode_from_tokens(neg_cond_raw, return_pooled=True)
return ([[pos_cond, {"pooled_output": pos_pooled}]],[[neg_cond, {"pooled_output": neg_pooled}]],)
return ([[pos_cond, {"pooled_output": pos_pooled}]],[[neg_cond, {"pooled_output": neg_pooled}]],clip,Positive,Negative)
class ImageTool:
def __init__(self):
@@ -127,11 +141,224 @@ class ImageTool:
image = torch.from_numpy(image)[None,]
return(image,)
class Wildcards:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {
"required":{
"clip": ("CLIP",),
"textfile" : [sorted(folder_paths.get_filename_list("chibi-wildcards"))],
"keyword":("STRING", {"default": "__wildcard__","multiline": False}),
},
"optional":{
"text" : ("TEXT",),
},
}
RETURN_TYPES = ("CONDITIONING","TEXT",)
FUNCTION = "wildcards"
CATEGORY = "Chibi-Nodes"
seed = random.seed()
def IS_CHANGED(s,seed):
seed = random.seed()
def wildcards(self, textfile,keyword,clip,text=None,):
with open(folder_paths.get_full_path("chibi-wildcards", textfile)) as f:
lines = f.readlines()
aline = random.choice(lines)
if text != None:
raw = text.replace(keyword,aline)
cond_raw = clip.tokenize(raw)
cond, pooled = clip.encode_from_tokens(cond_raw, return_pooled=True)
return([[cond, {"pooled_output": pooled}]],raw,)
else:
cond_raw = clip.tokenize(aline)
cond, pooled = clip.encode_from_tokens(cond_raw, return_pooled=True)
return([[cond, {"pooled_output": pooled}]],aline,)
class LoadEmbedding:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return{"required":{
"text" : ("TEXT",),
"embedding":[sorted(folder_paths.get_filename_list("embeddings"))],
"weight": ("FLOAT", {"default": 1.0, "min": -2, "max": 2, "step": 0.1, "round": 0.01}),
}}
RETURN_TYPES = ("TEXT",)
FUNCTION = "loadembedding"
CATEGORY = "Chibi-Nodes"
def loadembedding(self, text, embedding,weight):
output = text + ", (embedding:" + embedding + ":" + str(weight) + ")"
# embedding.rsplit('.', maxsplit=1)[0]
return(output,)
class ConditionText:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"clip": ("CLIP",),
},
"optional":{
"first" : ("TEXT",),
"second" : ("TEXT",),
"third" : ("TEXT",),
"fourth" : ("TEXT",),
}
}
RETURN_TYPES = ("CLIP","CONDITIONING","CONDITIONING","CONDITIONING","CONDITIONING",)
RETURN_NAMES = ("CLIP","first","second","third","fourth",)
FUNCTION = "conditiontext"
CATEGORY = "Chibi-Nodes"
def conditiontext(self, clip, first=None, second=None, third=None, fourth=None, ):
emptystring = ""
returnedcond = []
if first != None:
firstraw = clip.tokenize(first)
first_cond, first_pooled = clip.encode_from_tokens(firstraw, return_pooled=True)
returnedcond.append([[first_cond, {"pooled_output": first_pooled}]])
else:
emptyraw = clip.tokenize(emptystring)
empty_cond, empty_pooled = clip.encode_from_tokens(emptyraw, return_pooled=True)
returnedcond.append([[empty_cond, {"pooled_output": empty_pooled}]])
if second != None:
secondraw = clip.tokenize(second)
second_cond, second_pooled = clip.encode_from_tokens(secondraw, return_pooled=True)
returnedcond.append([[second_cond, {"pooled_output": second_pooled}]])
else:
emptyraw = clip.tokenize(emptystring)
empty_cond, empty_pooled = clip.encode_from_tokens(emptyraw, return_pooled=True)
returnedcond.append([[empty_cond, {"pooled_output": empty_pooled}]])
if third != None:
thirdraw = clip.tokenize(third)
third_cond, third_pooled = clip.encode_from_tokens(thirdraw, return_pooled=True)
returnedcond.append([[third_cond, {"pooled_output": third_pooled}]])
else:
emptyraw = clip.tokenize(emptystring)
empty_cond, empty_pooled = clip.encode_from_tokens(emptyraw, return_pooled=True)
returnedcond.append([[empty_cond, {"pooled_output": empty_pooled}]])
if fourth != None:
fourthraw = clip.tokenize(fourth)
fourth_cond, fourth_pooled = clip.encode_from_tokens(fourthraw, return_pooled=True)
returnedcond.append([[fourth_cond, {"pooled_output": fourth_pooled}]])
else:
emptyraw = clip.tokenize(emptystring)
empty_cond, empty_pooled = clip.encode_from_tokens(emptyraw, return_pooled=True)
returnedcond.append([[empty_cond, {"pooled_output": empty_pooled}]])
return (clip,returnedcond[0],returnedcond[1],returnedcond[2],returnedcond[3],)
class SaveImages:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {
"required": {
},
"optional":{
"images" : ("IMAGE",),
"latents" : ("LATENT",),
"vae" : ("VAE",),
},
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
}
RETURN_TYPES = ()
FUNCTION = "saveimage"
OUTPUT_NODE = True
CATEGORY = "Chibi-Nodes"
def saveimage(self,vae=None, latents=None, images=None, prompt=None, extra_pnginfo=None):
now = str(round(time.time()))
results = list()
counter = 0
if images != None:
full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(now, folder_paths.get_output_directory(), images[0].shape[1], images[0].shape[0])
for image in images:
i = 255. * image.cpu().numpy()
img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
metadata = None
if not args.disable_metadata:
metadata = PngInfo()
if prompt is not None:
metadata.add_text("prompt", json.dumps(prompt))
if extra_pnginfo is not None:
for x in extra_pnginfo:
metadata.add_text(x, json.dumps(extra_pnginfo[x]))
file = f"{now}_{counter:03}_.png"
img.save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level=4)
results.append({
"filename": file,
"subfolder": subfolder,
"type": "output"
})
counter += 1
if vae != None:
if latents != None:
decoded_latents = vae.decode(latents["samples"])
full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(now, folder_paths.get_output_directory(), decoded_latents[0].shape[1], decoded_latents[0].shape[0])
for latent in decoded_latents:
i = 255. * latent.cpu().numpy()
img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
metadata = None
if not args.disable_metadata:
metadata = PngInfo()
if prompt is not None:
metadata.add_text("prompt", json.dumps(prompt))
if extra_pnginfo is not None:
for x in extra_pnginfo:
metadata.add_text(x, json.dumps(extra_pnginfo[x]))
file = f"{now}_{counter:03}_.png"
img.save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level=4)
results.append({
"filename": file,
"subfolder": subfolder,
"type": "output"
})
counter += 1
return { "ui": { "images": results } }
NODE_CLASS_MAPPINGS = {
"Loader":Loader,
"Prompts": Prompts,
"ImageTool": ImageTool,
"Wildcards": Wildcards,
"LoadEmbedding": LoadEmbedding,
"ConditionText": ConditionText,
"SaveImages":SaveImages,
}
+398
View File
@@ -0,0 +1,398 @@
Lion
Elephant
Tiger
Giraffe
Cheetah
Zebra
Gorilla
Penguin
Dolphin
Kangaroo
Polar bear
Koala
Orangutan
Rhinoceros
Chimpanzee
Crocodile
Hippopotamus
Lemur
Hyena
Bald eagle
Octopus
Panda
Red fox
Snow leopard
Ostrich
Black bear
Meerkat
Komodo dragon
Wolf
Blue whale
Great white shark
Platypus
Red panda
Peacock
Armadillo
Boa constrictor
Raccoon
Cheetah
Ocelot
Swordfish
Koala
Manatee
Puma
Snow leopard
Porcupine
Platypus
Gazelle
Tasmanian devil
Flamingo
Chameleon
Red squirrel
Hammerhead shark
Bald eagle
Tarantula
Kangaroo
Sloth
Hyena
Wallaby
Gila monster
Alligator
Iguana
Puffin
Sea otter
Tapir
Pika
Jerboa
Salamander
Pigeon
Gannet
Rattlesnake
Vulture
Harpy eagle
Aye-aye
Fennec fox
Mandrill
Yak
Bison
Lemming
Wombat
Tasmanian tiger
Narwhal
Wolverine
Caracal
Walrus
Fossa
Axolotl
Lemur
Tapir
Warthog
Okapi
Quokka
Capybara
Snowshoe hare
Flying squirrel
Cuttlefish
Blobfish
Kakapo
Proboscis monkey
Gibbon
Aardvark
Bald eagle
Sloth
Raccoon
Armadillo
Rhinoceros
Platypus
Lemur
Cheetah
Puma
Wallaby
Ocelot
Octopus
Chimpanzee
Puffin
Tapir
Gannet
Wolverine
Meerkat
Hyena
Panda
Blue whale
Red panda
Snow leopard
Vulture
Rattlesnake
Gorilla
Platypus
Gazelle
Flamingo
Cheetah
Orangutan
Bald eagle
Dolphin
Koala
Zebra
Elephant
Lion
Tiger
Giraffe
Komodo dragon
Koala
Harpy eagle
Tasmanian devil
Manatee
Pigeon
Red squirrel
Polar bear
Tapir
Iguana
Ostrich
Chameleon
Aye-aye
Lemming
Bison
Hammerhead shark
Snowshoe hare
Fossa
Tasmanian tiger
Boa constrictor
Salamander
Gila monster
Kakapo
Pika
Bald eagle
Lemur
Sloth
Axolotl
Quokka
Wallaby
Caracal
Sea otter
Manatee
Gannet
Platypus
Porcupine
Raccoon
Wolf
Hyena
Polar bear
Cheetah
Chimpanzee
Elephant
Kangaroo
Zebra
Ostrich
Dolphin
Cheetah
Snow leopard
Penguin
Tiger
Red panda
Platypus
Gorilla
Boa constrictor
Lemur
Meerkat
Chimpanzee
Octopus
Komodo dragon
Raccoon
Koala
Snowshoe hare
Ocelot
Bald eagle
Manatee
Blue whale
Red fox
Snow leopard
Panda
Axolotl
Blobfish
Kakapo
Proboscis monkey
Gibbon
Aardvark
Rhinoceros
Platypus
Lemur
Cheetah
Puma
Wallaby
Ocelot
Octopus
Chimpanzee
Puffin
Tapir
Gannet
Wolverine
Meerkat
Hyena
Panda
Blue whale
Red panda
Snow leopard
Vulture
Rattlesnake
Gorilla
Platypus
Gazelle
Flamingo
Cheetah
Orangutan
Bald eagle
Dolphin
Koala
Zebra
Elephant
Lion
Tiger
Giraffe
Komodo dragon
Koala
Harpy eagle
Tasmanian devil
Manatee
Pigeon
Red squirrel
Polar bear
Tapir
Iguana
Ostrich
Chameleon
Aye-aye
Lemming
Bison
Hammerhead shark
Snowshoe hare
Fossa
Tasmanian tiger
Boa constrictor
Salamander
Gila monster
Kakapo
Pika
Bald eagle
Lemur
Sloth
Axolotl
Quokka
Wallaby
Caracal
Sea otter
Manatee
Gannet
Platypus
Porcupine
Raccoon
Wolf
Hyena
Polar bear
Cheetah
Chimpanzee
Elephant
Kangaroo
Zebra
Ostrich
Dolphin
Cheetah
Snow leopard
Penguin
Tiger
Red panda
Platypus
Gorilla
Boa constrictor
Lemur
Meerkat
Chimpanzee
Octopus
Komodo dragon
Raccoon
Koala
Snowshoe hare
Ocelot
Bald eagle
Manatee
Blue whale
Red fox
Snow leopard
Panda
Axolotl
Blobfish
Kakapo
Proboscis monkey
Gibbon
Aardvark
Rhinoceros
Platypus
Lemur
Cheetah
Puma
Wallaby
Ocelot
Octopus
Chimpanzee
Puffin
Tapir
Gannet
Wolverine
Meerkat
Hyena
Panda
Blue whale
Red panda
Snow leopard
Vulture
Rattlesnake
Gorilla
Platypus
Gazelle
Flamingo
Cheetah
Orangutan
Bald eagle
Dolphin
Koala
Zebra
Elephant
Lion
Tiger
Giraffe
Komodo dragon
Koala
Harpy eagle
Tasmanian devil
Manatee
Pigeon
Red squirrel
Polar bear
Tapir
Iguana
Ostrich
Chameleon
Aye-aye
Lemming
Bison
Hammerhead shark
Snowshoe hare
Fossa
Tasmanian tiger
Boa constrictor
Salamander
Gila monster
Kakapo
Pika
Bald eagle
Lemur
Sloth
Axolotl
Quokka
Wallaby
Caracal
Sea otter
Manatee
Gannet
Platypus
Porcupine
Raccoon
+249
View File
@@ -0,0 +1,249 @@
Abstract Expressionism
Art Nouveau
Baroque
Cubism
Dada
Fauvism
Impressionism
Minimalism
Op Art
Pointillism
Pop Art
Realism
Surrealism
Constructivism
De Stijl
Gothic
Renaissance
Rococo
Abstract Art
Suprematism
Trompe-l'oeil
Photorealism
Sculpture
Tonalism
Neo-Classicism
Pre-Raphaelite Brotherhood
Color Field Painting
Neo-Impressionism
Post-Impressionism
Street Art
Op Art
Conceptual Art
Social Realism
Ashcan School
Art Deco
Land Art
Digital Art
Art Brut
Installation Art
Body Art
Hyperrealism
Futurism
Romanticism
Cubo-Futurism
Precisionism
Surrealist Automatism
Symbolism
Magic Realism
Hard-edge Painting
Regionalism
Kinetic Art
Tenebrism
Abstract Illusionism
Fluxus
Orphism
Neoclassical Sculpture
Earthworks
Arte Povera
Analytical Cubism
Street Photography
Tachisme
Luminism
Arte Concreto
Byzantine Art
Primitivism
Geometric Abstraction
Informalism
Rocaille
Social Sculpture
Transgressive Art
Conceptual Realism
Classicism
Post-Minimalism
Orientalism
Action Painting
Stuckism
Photomontage
Socialist Realism
Art Informel
Cubist Realism
Feminist Art
Hard-edge Abstraction
Poster Art
Rococo Revival
Superflat
Illusionistic Surrealism
Artistic Realism
Cloisonnism
Non-objective Art
Nihonga
Pintura Negra
Intimism
Visionary Art
Equipo Crónica
Counter-reformation Art
Deconstructivism
Hyper-Modernism
Rayonism
Les Nabis
New Objectivity
Anamorphic Art
Outsider Art
Spatialism
Neorealism
Preraphaelite Style
Remodernism
Orphism
Pittura Metafisica
Synthetic Cubism
Cubo-Futurism
Visionary Surrealism
Graffiti Art
Geometric Abstraction
Pop Surrealism
Non-representational Art
Kinetic Sculpture
Optical Art
Fluxus
Body Painting
Magic Realism
Precisionism
Visual Poetry
Art Brut
Installation Art
Photorealism
Outsider Art
Neo Rauchism
Precisionism
Symbolism
Environmental Art
Maximalism
Pintura Negra
Pattern and Decoration
Linearism
Primitive Art
Post-Impressionism
Superrealism
New Classicism
Digital Art
Stuckism
Arte Concreto
Earthworks
Arte Povera
Luminism
Street Photography
Neoclassical Sculpture
Orphism
Post-Minimalism
Transgressive Art
Socialist Realism
Action Painting
Photomontage
Byzantine Art
Socialist Realism
Stuckism
Photorealism
Action Painting
Socialist Realism
Non-objective Art
Visionary Art
Feminist Art
Tonalism
Counter-reformation Art
Equipo Crónica
Illusionistic Surrealism
Superflat
Artistic Realism
Poster Art
Rococo Revival
Poster Art
Non-objective Art
Visionary Art
Feminist Art
Tonalism
Counter-reformation Art
Deconstructivism
Hyper-Modernism
Rayonism
Les Nabis
New Objectivity
Anamorphic Art
Outsider Art
Spatialism
Neorealism
Preraphaelite Style
Remodernism
Orphism
Pittura Metafisica
Synthetic Cubism
Cubo-Futurism
Visionary Surrealism
Graffiti Art
Geometric Abstraction
Pop Surrealism
Non-representational Art
Kinetic Sculpture
Optical Art
Fluxus
Body Painting
Magic Realism
Precisionism
Visual Poetry
Art Brut
Installation Art
Photorealism
Outsider Art
Neo Rauchism
Precisionism
Symbolism
Environmental Art
Maximalism
Pintura Negra
Pattern and Decoration
Linearism
Primitive Art
Post-Impressionism
Superrealism
New Classicism
Digital Art
Stuckism
Arte Concreto
Earthworks
Arte Povera
Luminism
Street Photography
Neoclassical Sculpture
Orphism
Post-Minimalism
Transgressive Art
Socialist Realism
Action Painting
Photomontage
Byzantine Art
Socialist Realism
Stuckism
Photorealism
Action Painting
Socialist Realism
Non-objective Art
Visionary Art
Feminist Art
Tonalism
Counter-reformation Art
Equipo Crónica
Illusionistic Surrealism
Superflat
Artistic Realism
Poster Art
Rococo Revival
+52
View File
@@ -0,0 +1,52 @@
Red
Blue
Green
Yellow
Purple
Orange
Pink
Turquoise
Brown
Black
White
Gray
Lavender
Magenta
Cyan
Gold
Silver
Indigo
Teal
Maroon
Olive
Beige
Navy
Violet
Aqua
Lime
Crimson
Burgundy
Peach
Mint
Slate
Ivory
Khaki
Ruby
Emerald
Sapphire
Amber
Bronze
Charcoal
Plum
Mauve
Fuchsia
Periwinkle
Coral
Azure
Lilac
Tangerine
Jade
Cobalt
Rose
Cerulean
Apricot
+54
View File
@@ -0,0 +1,54 @@
Serenic
Bustling
Idyllic
Picturesque
Vibrant
Tranquil
Majestic
Lively
Peaceful
Breathtaking
Enchanting
Barren
Quaint
Urban
Rustic
Surreal
Colorful
Dramatic
Cozy
Hectic
Harmonious
Exotic
Sparse
Gloomy
Radiant
Awe-inspiring
Charming
Picturesque
Misty
Arid
Nocturnal
Sunny
Enigmatic
Chaos
Mesmerizing
Pastoral
Eerie
Enthralling
Sprawling
Calm
Industrial
Dreamy
Tumultuous
Elegant
Otherworldly
Scenic
Sublime
Tragic
Whimsical
Untamed
Melancholic
Magical
Spectacular
Sultry
@@ -0,0 +1,50 @@
Refrigerator
Toaster
Blender
Microwave
Coffee maker
Dishwasher
Washing machine
Dryer
Television
Vacuum cleaner
Sofa
Dining table
Chair
Bed
Wardrobe
Mirror
Clock
Lamp
Picture frame
Curtains
Bookshelf
Trash can
Kitchen sink
Cutting board
Utensil set
Iron
Ironing board
Hairdryer
Towel rack
Showerhead
Toilet
Bathtub
Soap dispenser
Toothbrush holder
Toilet paper holder
Hand towel
Bath towel
Frying pan
Cooking pot
Dish rack
Silverware drawer
Broom
Dustpan
Oven
Food processor
Spice rack
Trash bags
Coat hanger
Fire extinguisher
Smoke detector
+51
View File
@@ -0,0 +1,51 @@
Mountains
Valleys
Deserts
Beaches
Forests
Meadows
Hills
Canyons
Tundra
Glaciers
Swamps
Jungles
Savannas
Plateaus
Islands
Prairies
Waterfalls
Volcanoes
Caves
Coral reefs
Urban landscapes
Rivers
Lakes
Ponds
Fjords
Cliffs
Oases
Marshes
Wetlands
Archipelagos
Badlands
Dunes
Vineyards
Terraced fields
Countryside
Farmlands
Tropical rainforests
Taigas
Steppes
Highlands
Barren wastelands
Craters
Lava fields
Alpine meadows
Boreal forests
Rocky shores
Mangroves
Estuaries
Salt flats
Arid plateaus
Polar ice caps
+50
View File
@@ -0,0 +1,50 @@
Standing
Sitting cross-legged
Arms outstretched to the sides
Leaning against a wall
Hands on hips
Kneeling with hands on the ground
One hand on chin in thought
Arms raised in victory
Reaching for the sky
Lying on your back with arms and legs extended
Sitting on a stool
Arms folded in front
One knee bent, resting on a rock
Hands clasped behind back
Hugging oneself
Posing in a yoga tree pose
Leaning forward with hands on knees
Lying on stomach with head propped on hand
Sitting with one leg tucked under
Crouching down
Hands in prayer position
Standing on one leg
Hands on a hip, one leg bent
Arms outstretched with palms up
One hand behind the head
Standing with one hand on the chin
Lying on the side with legs bent
Standing with one hand on a hip
Balancing on one foot
Arms stretched forward
Holding a bouquet of flowers
Kneeling with head resting on hands
Stretching arms behind
Sitting on a chair with one leg crossed over the other
Sitting on a step with legs extended
Lying on side with legs extended
One hand pointing forward
Standing with arms at sides
Leaning back with arms out
Sitting on the ground with legs wide apart
Posing as if dancing
Hands in a praying position
Sitting with legs crossed at ankles
One hand resting on a table
Holding a book
Sitting with one leg tucked under
Standing with arms crossed over chest
Arms extended to the side
Hands on hips, one leg bent
Lying on stomach with hands under chin
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 KiB