Merge pull request #3791 from shirayu/fix/filename

Truncate too long filename (Fix #705)
This commit is contained in:
AUTOMATIC1111 2023-01-04 18:17:50 +03:00 committed by GitHub
commit eed58279e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -447,6 +447,14 @@ def get_next_sequence_number(path, basename):
return result + 1
def truncate_fullpath(full_path, encoding='utf-8'):
dir_name, full_name = os.path.split(full_path)
file_name, file_ext = os.path.splitext(full_name)
max_length = os.statvfs(dir_name).f_namemax
file_name_truncated = file_name.encode(encoding)[:max_length - len(file_ext)].decode(encoding, 'ignore')
return os.path.join(dir_name , file_name_truncated + file_ext)
def save_image(image, path, basename, seed=None, prompt=None, extension='png', info=None, short_filename=False, no_prompt=False, grid=False, pnginfo_section_name='parameters', p=None, existing_info=None, forced_filename=None, suffix="", save_to_dirs=None):
"""Save an image.
@ -487,7 +495,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
if save_to_dirs:
dirname = namegen.apply(opts.directories_filename_pattern or "[prompt_words]").lstrip(' ').rstrip('\\ /')
path = os.path.join(path, dirname)
path = truncate_fullpath(os.path.join(path, dirname))
os.makedirs(path, exist_ok=True)
@ -511,13 +519,13 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
fullfn = None
for i in range(500):
fn = f"{basecount + i:05}" if basename == '' else f"{basename}-{basecount + i:04}"
fullfn = os.path.join(path, f"{fn}{file_decoration}.{extension}")
fullfn = truncate_fullpath(os.path.join(path, f"{fn}{file_decoration}.{extension}"))
if not os.path.exists(fullfn):
break
else:
fullfn = os.path.join(path, f"{file_decoration}.{extension}")
fullfn = truncate_fullpath(os.path.join(path, f"{file_decoration}.{extension}"))
else:
fullfn = os.path.join(path, f"{forced_filename}.{extension}")
fullfn = truncate_fullpath(os.path.join(path, f"{forced_filename}.{extension}"))
pnginfo = existing_info or {}
if info is not None: