[Bugfix] truncate filenames in invokeai batch that exceed max filename length (#3143)

- This prevents `invokeai-batch` from trying to create image files whose
names would exceed PC_NAME_MAX.
- Closes #3115
This commit is contained in:
Lincoln Stein
2023-04-09 12:36:10 -04:00
committed by GitHub

View File

@@ -99,8 +99,9 @@ def expand_prompts(
sequence = 0
for command in commands:
sequence += 1
format = _get_fn_format(outdir, sequence)
parent_conn.send(
command + f' --fnformat="dp.{sequence:04}.{{prompt}}.png"'
command + f' --fnformat="{format}"'
)
parent_conn.close()
else:
@@ -110,7 +111,17 @@ def expand_prompts(
for p in children:
p.terminate()
def _get_fn_format(directory:str, sequence:int)->str:
"""
Get a filename that doesn't exceed filename length restrictions
on the current platform.
"""
max_length = os.pathconf(directory,'PC_NAME_MAX')
prefix = f'dp.{sequence:04}.'
suffix = '.png'
max_length -= len(prefix)+len(suffix)
return f'{prefix}{{prompt:0.{max_length}}}{suffix}'
class MessageToStdin(object):
def __init__(self, connection: Connection):
self.connection = connection