This commit is contained in:
justumen
2025-01-22 14:06:24 +01:00
parent 0c2a977076
commit 898840c608
1808 changed files with 2709 additions and 94 deletions

4
.gitignore vendored
View File

@@ -5,4 +5,6 @@ clear_vram.py
web/js/clear_vram.js
speakers
*.text
web/js/*.txt
web/js/*.txt
ScriptsPerso/
civitai/NSFW_*

View File

@@ -14,7 +14,7 @@ import node_helpers
import hashlib
from folder_paths import get_filename_list, get_full_path, models_dir
import nodes
# Register the new checkpoint folder
bjornulf_checkpoint_path = os.path.join(folder_paths.models_dir, "checkpoints", "Bjornulf_civitAI")
os.makedirs(bjornulf_checkpoint_path, exist_ok=True)
@@ -39,7 +39,9 @@ image_folders = {
"lora_sdxl_1.0": os.path.join(civitai_base_path, "lora_sdxl_1.0"),
"lora_sd_1.5": os.path.join(civitai_base_path, "lora_sd_1.5"),
"lora_pony": os.path.join(civitai_base_path, "lora_pony"),
"lora_flux.1_d": os.path.join(civitai_base_path, "lora_flux.1_d")
"lora_flux.1_d": os.path.join(civitai_base_path, "lora_flux.1_d"),
"lora_hunyuan_video": os.path.join(civitai_base_path, "lora_hunyuan_video"),
"NSFW_lora_hunyuan_video": os.path.join(civitai_base_path, "NSFW_lora_hunyuan_video")
}
# Add folder paths for each image folder
@@ -1653,3 +1655,146 @@ class CivitAILoraSelectorPONY:
m.update(f.read())
m.update(image.encode('utf-8'))
return m.digest().hex()
class CivitAILoraSelectorHunyuan:
@classmethod
def INPUT_TYPES(s):
image_extensions = ('.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp')
# Try NSFW folder first
nsfw_files = [f"NSFW_lora_hunyuan_video/{f}" for f in folder_paths.get_filename_list("NSFW_lora_hunyuan_video")
if f.lower().endswith(image_extensions)]
# If NSFW folder is empty or doesn't exist, try regular folder
if not nsfw_files:
files = [f"lora_hunyuan_video/{f}" for f in folder_paths.get_filename_list("lora_hunyuan_video")
if f.lower().endswith(image_extensions)]
else:
files = nsfw_files
if not files:
files = ["none"]
return {
"required": {
"image": (sorted(files), {"image_upload": True}),
"model": ("MODEL",),
"clip": ("CLIP",),
"strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}),
"strength_clip": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}),
"civitai_token": ("STRING", {"default": ""})
},
}
RETURN_TYPES = ("MODEL", "CLIP", "STRING", "STRING", "STRING")
RETURN_NAMES = ("model", "clip", "name", "civitai_url", "trigger_words")
FUNCTION = "load_lora"
CATEGORY = "Bjornulf"
def load_lora(self, image, model, clip, strength_model, strength_clip, civitai_token):
def download_file(url, destination_path, lora_name, api_token=None):
filename = f"{lora_name}.safetensors"
file_path = os.path.join(destination_path, filename)
headers = {}
if api_token:
headers['Authorization'] = f'Bearer {api_token}'
try:
print(f"Downloading from: {url}")
response = requests.get(url, headers=headers, stream=True)
response.raise_for_status()
file_size = int(response.headers.get('content-length', 0))
block_size = 8192
downloaded = 0
with open(file_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=block_size):
if chunk:
f.write(chunk)
downloaded += len(chunk)
if file_size > 0:
progress = int(50 * downloaded / file_size)
bars = '=' * progress + '-' * (50 - progress)
percent = (downloaded / file_size) * 100
print(f'\rProgress: [{bars}] {percent:.1f}%', end='')
print(f"\nFile downloaded successfully to: {file_path}")
return file_path
except requests.exceptions.RequestException as e:
print(f"Error downloading file: {e}")
raise
if image == "none":
raise ValueError("No image selected")
# Try loading NSFW JSON first, fall back to regular JSON if not found
nsfw_json_path = os.path.join(parsed_models_path, 'NSFW_parsed_lora_hunyuan_video_loras.json')
regular_json_path = os.path.join(parsed_models_path, 'parsed_lora_hunyuan_video_loras.json')
json_path = nsfw_json_path if os.path.exists(nsfw_json_path) else regular_json_path
hunYuan = "hunyuan_video"
with open(json_path, 'r') as f:
loras_info = json.load(f)
image_name = os.path.basename(image)
lora_info = next((lora for lora in loras_info
if os.path.basename(lora['image_path']) == image_name), None)
if not lora_info:
raise ValueError(f"No LoRA information found for image: {image_name}")
lora_dir = os.path.join(folder_paths.models_dir, "loras", "Bjornulf_civitAI", hunYuan)
os.makedirs(lora_dir, exist_ok=True)
lora_filename = f"{lora_info['name']}.safetensors"
full_lora_path = os.path.join(lora_dir, lora_filename)
if not os.path.exists(full_lora_path):
print(f"Downloading LoRA {lora_info['name']}...")
download_url = lora_info['download_url']
if civitai_token:
download_url += f"?token={civitai_token}" if '?' not in download_url else f"&token={civitai_token}"
try:
download_file(download_url, lora_dir, lora_info['name'], civitai_token)
except Exception as e:
raise ValueError(f"Failed to download LoRA: {e}")
relative_lora_path = os.path.join("Bjornulf_civitAI", hunYuan, lora_filename)
try:
lora_loader = nodes.LoraLoader()
model_lora, clip_lora = lora_loader.load_lora(model=model,
clip=clip,
lora_name=relative_lora_path,
strength_model=strength_model,
strength_clip=strength_clip)
except Exception as e:
raise ValueError(f"Failed to load LoRA: {e}")
trained_words_str = ", ".join(lora_info.get('trained_words', []))
return (model_lora, clip_lora, lora_info['name'], f"https://civitai.com/models/{lora_info['lora_id']}", trained_words_str)
@classmethod
def IS_CHANGED(s, image):
if image == "none":
return ""
image_path = os.path.join(civitai_base_path, image)
if not os.path.exists(image_path):
return ""
m = hashlib.sha256()
with open(image_path, 'rb') as f:
m.update(f.read())
m.update(image.encode('utf-8'))
return m.digest().hex()

View File

@@ -1,6 +1,6 @@
# 🔗 Comfyui : Bjornulf_custom_nodes v0.65 🔗
# 🔗 Comfyui : Bjornulf_custom_nodes v0.66 🔗
A list of 116 custom nodes for Comfyui : Display, manipulate, create and edit text, images, videos, loras, generate characters and more.
A list of 119 custom nodes for Comfyui : Display, manipulate, create and edit text, images, videos, loras, generate characters and more.
You can manage looping operations, generate randomized content, trigger logical conditions, pause and manually control your workflows and even work with external AI tools, like Ollama or Text To Speech.
# Coffee : ☕☕☕☕☕ 5/5
@@ -42,6 +42,7 @@ Support me and my work : ❤️❤️❤️ <https://ko-fi.com/bjornulf> ❤️
`113.` [📝🔪 Text split in 5](#113----text-split-in-5)
`115.` [📥 Load Text From Bjornulf Folder](115----load-text-from-bjornulf-folder)
`116.` [📥 Load Text From Path](#116----load-text-from-path)
`117.` [📝👈 Line selector (🎲 Or random)](#)
## 🔥 Text Generator 🔥
`81.` [🔥📝 Text Generator 📝🔥](#81----text-generator-)
@@ -97,6 +98,7 @@ Support me and my work : ❤️❤️❤️ <https://ko-fi.com/bjornulf> ❤️
`41.` [🎲 Random Load checkpoint (Model Selector)](#41----random-load-checkpoint-model-selector)
`48.` [🔀🎲 Text scrambler (🧑 Character)](#48----text-scrambler--character)
`55.` [🎲👑 Random Lora Selector](#55----random-lora-selector)
`117.` [📝👈 Line selector (🎲 Or random)](#)
## 🖼💾 Image Save 💾🖼
`16.` [💾🖼💬 Save image for Bjornulf LobeChat](#16----save-image-for-bjornulf-lobechat-for-my-custom-lobe-chat)
@@ -155,6 +157,7 @@ Support me and my work : ❤️❤️❤️ <https://ko-fi.com/bjornulf> ❤️
`103.` [📥👑 Load Lora SD1.5 (+Download from CivitAi)](#103----load-lora-sd15-download-from-civitai)
`104.` [📥👑 Load Lora SDXL (+Download from CivitAi)](#104----load-lora-sdxl-download-from-civitai)
`105.` [📥👑 Load Lora Pony (+Download from CivitAi)](#105----load-lora-pony-download-from-civitai)
`119.` [📥👑📹 Load Lora Hunyuan Video (+Download from CivitAi)](#)
## 📹 Video 📹
`20.` [📹 Video Ping Pong](#20----video-ping-pong)
@@ -171,21 +174,24 @@ Support me and my work : ❤️❤️❤️ <https://ko-fi.com/bjornulf> ❤️
`77.` [📹🔍 Video details ⚙](#77----video-details-)
`78.` [📹➜📹 Convert Video](#78----convert-video)
`79.` [📹🔗 Concat Videos from list](#79----concat-videos-from-list)
`119.` [📥👑📹 Load Lora Hunyuan Video (+Download from CivitAi)](#)
## 🤖 AI 🤖
`19.` [🦙💬 Ollama Talk](#19----ollama-talk)
`31.` [📝➜🔊 TTS - Text to Speech](#31----tts---text-to-speech-100-local-any-voice-you-want-any-language)
`62.` [🦙👁 Ollama Vision](#62----ollama-vision)
`63.` [🦙 Ollama Configuration ⚙](#63----ollama-configuration-)
`64.` [🦙 Ollama Job Selector 💼](#64----ollama-job-selector-)
`65.` [🦙 Ollama Persona Selector 🧑](#65----ollama-persona-selector-)
`31.` [📝➜🔊 TTS - Text to Speech](#31----tts---text-to-speech-100-local-any-voice-you-want-any-language)
`66.` [🔊➜📝 STT - Speech to Text](#66----stt---speech-to-text)
`118.` [🔊 TTS Configuration ⚙](#118)
## 🔊 Audio 🔊
`31.` [📝➜🔊 TTS - Text to Speech](#31----tts---text-to-speech-100-local-any-voice-you-want-any-language)
`52.` [🔊📹 Audio Video Sync](#52----audio-video-sync)
`59.` [📹🔊 Combine Video + Audio](#59----combine-video--audio)
`66.` [🔊➜📝 STT - Speech to Text](#66----stt---speech-to-text)
`118.` [🔊 TTS Configuration ⚙](#118)
## 💻 System 💻
`34.` [🧹 Free VRAM hack](#34----free-vram-hack)
@@ -353,6 +359,7 @@ cd /where/you/installed/ComfyUI && python main.py
- **0.63**: delete long file, useless
- **0.64**: remove "import wget", added some keywords to text generators.
- **0.65**: ❗Breaking changes : Combine Text inputs are now all optional (PLease remake your nodes, sorry.) Add 6 new nodes : any2int, any2float, load text from folder, load text from path, load lora from path. Also upgraded the Save text node.
- **0.66**: Add lora hunyuan CIVIT ai + download, add TTS configuration node, edit requirements.txt
# 📝 Nodes descriptions
@@ -1641,3 +1648,35 @@ Just give the path of the file, it will recover its content.
If you want, with `Load Text From Path` you can also recover the elements in "Bjornulf/Text" by just adding it:
![Load Text](screenshots/load_text_PATH.png)
#### 117 - 📝👈 Line selector (🎲 Or random)
**Description:**
Select a line from input text. If set to 0 it will take a line at random.
If line taken at random,. it will not take a line starting with the symbol `#`.
So use that if you want to ignore a line.
![Line Selector](screenshots/line_selector.png)
#### 118 - 🔊 TTS Configuration ⚙
**Description:**
New optional configuration node to connect to TTS node, it can request a list of speakers for a given language and replace in the main TTS node :
- The URL.
- The language.
- The speaker.
Connect them only if you want to replace them with the one from the configuration node.
![tts config](screenshots/tts_config.png)
#### 119 - 📥👑 Load Lora Hunyuan Video (+Download from CivitAi)
**Description:**
Take a CivitAI Lora to use with Hunyuan. (NSFW list not on github of course.)
The workflow below is included : `workflows/HUNYUAN_basic_lora.json`) :
![hunyuan lora](screenshots/hunyuan_lora.png)

View File

@@ -37,7 +37,7 @@ from .random_seed_with_text import TextToStringAndSeed
from .load_image_alpha import LoadImageWithTransparency
from .image_mask_cutter import ImageMaskCutter
from .character_description import CharacterDescriptionGenerator
from .text_to_speech import TextToSpeech
from .text_to_speech import TextToSpeech, XTTSConfig
from .loop_combine_texts_by_lines import CombineTextsByLines
from .free_vram_hack import FreeVRAM
from .pause_resume_stop import PauseResume
@@ -87,14 +87,18 @@ from .ffmpeg_convert import ConvertVideo
from .text_generator import TextGenerator, TextGeneratorScene, TextGeneratorStyle, TextGeneratorCharacterFemale, TextGeneratorCharacterMale, TextGeneratorOutfitMale, TextGeneratorOutfitFemale, ListLooper, ListLooperScene, ListLooperStyle, ListLooperCharacter, ListLooperOutfitFemale, ListLooperOutfitMale, TextGeneratorCharacterPose, TextGeneratorCharacterObject, TextGeneratorCharacterCreature
from .API_flux import APIGenerateFlux
from .API_StableDiffusion import APIGenerateStability
from .API_civitai import APIGenerateCivitAI, APIGenerateCivitAIAddLORA, CivitAIModelSelectorPony, CivitAIModelSelectorSD15, CivitAIModelSelectorSDXL, CivitAIModelSelectorFLUX_S, CivitAIModelSelectorFLUX_D, CivitAILoraSelectorSD15, CivitAILoraSelectorSDXL, CivitAILoraSelectorPONY
from .API_civitai import APIGenerateCivitAI, APIGenerateCivitAIAddLORA, CivitAIModelSelectorPony, CivitAIModelSelectorSD15, CivitAIModelSelectorSDXL, CivitAIModelSelectorFLUX_S, CivitAIModelSelectorFLUX_D, CivitAILoraSelectorSD15, CivitAILoraSelectorSDXL, CivitAILoraSelectorPONY, CivitAILoraSelectorHunyuan
from .API_falAI import APIGenerateFalAI
from .latent_resolution_selector import LatentResolutionSelector
from .loader_lora_with_path import LoaderLoraWithPath
from .load_text import LoadTextFromFolder, LoadTextFromPath
from .string_splitter import TextSplitin5
from .line_selector import LineSelector
# from .text_generator_t2v import TextGeneratorText2Video
NODE_CLASS_MAPPINGS = {
"Bjornulf_LineSelector": LineSelector,
"Bjornulf_XTTSConfig": XTTSConfig,
# "Bjornulf_TextGeneratorText2Video": TextGeneratorText2Video,
"Bjornulf_LatentResolutionSelector": LatentResolutionSelector,
"Bjornulf_LoaderLoraWithPath": LoaderLoraWithPath,
"Bjornulf_LoadTextFromPath": LoadTextFromPath,
@@ -112,6 +116,7 @@ NODE_CLASS_MAPPINGS = {
"Bjornulf_CivitAILoraSelectorSD15": CivitAILoraSelectorSD15,
"Bjornulf_CivitAILoraSelectorSDXL": CivitAILoraSelectorSDXL,
"Bjornulf_CivitAILoraSelectorPONY": CivitAILoraSelectorPONY,
"Bjornulf_CivitAILoraSelectorHunyuan": CivitAILoraSelectorHunyuan,
# "Bjornulf_CivitAILoraSelector": CivitAILoraSelector,
"Bjornulf_APIGenerateCivitAIAddLORA": APIGenerateCivitAIAddLORA,
"Bjornulf_TextGenerator": TextGenerator,
@@ -222,7 +227,9 @@ NODE_DISPLAY_NAME_MAPPINGS = {
# "Bjornulf_ImageBlend": "🎨 Image Blend",
# "Bjornulf_APIHiResCivitAI": "🎨➜🎨 API Image hires fix (CivitAI)",
# "Bjornulf_CivitAILoraSelector": "lora Civit",
"Bjornulf_LineSelector": "📝👈 Line selector (🎲 Or random)",
"Bjornulf_LoaderLoraWithPath": "📥👑 Load Lora with Path",
# "Bjornulf_TextGeneratorText2Video": "🔥📝📹 Text Generator for text to video 📹📝🔥",
"Bjornulf_TextSplitin5": "📝🔪 Text split in 5",
"Bjornulf_LatentResolutionSelector": "🩷 Empty Latent Selector",
"Bjornulf_CivitAIModelSelectorSD15": "📥 Load checkpoint SD1.5 (+Download from CivitAi)",
@@ -233,6 +240,7 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"Bjornulf_CivitAILoraSelectorSD15": "📥👑 Load Lora SD1.5 (+Download from CivitAi)",
"Bjornulf_CivitAILoraSelectorSDXL": "📥👑 Load Lora SDXL (+Download from CivitAi)",
"Bjornulf_CivitAILoraSelectorPONY": "📥👑 Load Lora Pony (+Download from CivitAi)",
"Bjornulf_CivitAILoraSelectorHunyuan": "📥👑📹 Load Lora Hunyuan Video (+Download from CivitAi)",
"Bjornulf_APIGenerateFalAI": "☁🎨 API Image Generator (FalAI) 🎨☁",
"Bjornulf_APIGenerateCivitAI": "☁🎨 API Image Generator (CivitAI) 🎨☁",
"Bjornulf_APIGenerateCivitAIAddLORA": "☁👑 Add Lora (API ONLY - CivitAI) 👑☁",
@@ -262,6 +270,7 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"Bjornulf_OllamaTalk": "🦙💬 Ollama Talk",
"Bjornulf_OllamaImageVision": "🦙👁 Ollama Vision",
"Bjornulf_OllamaConfig": "🦙 Ollama Configuration ⚙",
"Bjornulf_XTTSConfig": "🔊 TTS Configuration ⚙",
"Bjornulf_OllamaSystemJobSelector": "🦙 Ollama Job Selector 👇",
"Bjornulf_OllamaSystemPersonaSelector": "🦙 Ollama Persona Selector 👇",
"Bjornulf_SpeechToText": "🔊➜📝 STT - Speech to Text",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 MiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 MiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 457 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Some files were not shown because too many files have changed in this diff Show More