Image generation: Safer image uploading

This commit is contained in:
oobabooga 2025-12-03 16:07:51 -08:00
parent 59285d501d
commit 49c60882bf
3 changed files with 19 additions and 21 deletions

View file

@ -3,7 +3,6 @@ import copy
import functools
import html
import json
import os
import pprint
import re
import shutil
@ -26,6 +25,7 @@ from modules.html_generator import (
convert_to_markdown,
make_thumbnail
)
from modules.image_utils import open_image_safely
from modules.logging_colors import logger
from modules.text_generation import (
generate_reply,
@ -1516,20 +1516,6 @@ def load_instruction_template_memoized(template):
return load_instruction_template(template)
def open_image_safely(path):
if path is None or not isinstance(path, str) or not Path(path).exists():
return None
if os.path.islink(path):
return None
try:
return Image.open(path)
except Exception as e:
logger.error(f"Failed to open image file: {path}. Reason: {e}")
return None
def upload_character(file, img_path, tavern=False):
img = open_image_safely(img_path)
decoded_file = file if isinstance(file, str) else file.decode('utf-8')

View file

@ -1,9 +1,7 @@
"""
Shared image processing utilities for multimodal support.
Used by both ExLlamaV3 and llama.cpp implementations.
"""
import base64
import io
import os
from pathlib import Path
from typing import Any, List, Tuple
from PIL import Image
@ -11,6 +9,20 @@ from PIL import Image
from modules.logging_colors import logger
def open_image_safely(path):
if path is None or not isinstance(path, str) or not Path(path).exists():
return None
if os.path.islink(path):
return None
try:
return Image.open(path)
except Exception as e:
logger.error(f"Failed to open image file: {path}. Reason: {e}")
return None
def convert_pil_to_base64(image: Image.Image) -> str:
"""Converts a PIL Image to a base64 encoded string."""
buffered = io.BytesIO()

View file

@ -7,7 +7,6 @@ from pathlib import Path
import gradio as gr
import numpy as np
from PIL import Image
from PIL.PngImagePlugin import PngInfo
from modules import shared, ui, utils
@ -16,6 +15,7 @@ from modules.image_models import (
load_image_model,
unload_image_model
)
from modules.image_utils import open_image_safely
from modules.logging_colors import logger
from modules.text_generation import stop_everything_event
from modules.utils import gradio
@ -159,7 +159,7 @@ def save_generated_images(images, state, actual_seed):
def read_image_metadata(image_path):
"""Read generation metadata from PNG file."""
try:
with Image.open(image_path) as img:
with open_image_safely(image_path) as img:
if hasattr(img, 'text') and 'image_gen_settings' in img.text:
return json.loads(img.text['image_gen_settings'])
except Exception as e: