diff --git a/tab_batch_ng.py b/tab_batch_ng.py index a99c872..6fefb8d 100644 --- a/tab_batch_ng.py +++ b/tab_batch_ng.py @@ -316,7 +316,7 @@ def render_batch_processor(state: AppState): 'seed', 'cfg', 'camera', 'flf', KEY_SEQUENCE_NUMBER, 'frame_to_skip', 'end_frame', 'transition', 'vace_length', 'input_a_frames', 'input_b_frames', 'reference switch', 'vace schedule', - 'reference path', 'video file path', 'reference image path', 'flf image path', + 'middle frame path', 'video file path', 'reference image path', 'flf image path', } standard_keys.update(lora_keys) @@ -632,7 +632,7 @@ def _render_sequence_card(i, seq, batch_list, data, file_path, state, # Image paths with preview for img_label, img_key in [ ('Reference Image Path', 'reference image path'), - ('Reference Path', 'reference path'), + ('Middle Frame Path', 'middle frame path'), ('FLF Image Path', 'flf image path'), ]: with ui.row().classes('w-full items-center'): diff --git a/tab_timeline_ng.py b/tab_timeline_ng.py index 408e427..4ae0001 100644 --- a/tab_timeline_ng.py +++ b/tab_timeline_ng.py @@ -618,7 +618,7 @@ def _render_preview_fields(item_data: dict): known_keys = { 'sequence_number', 'general_prompt', 'general_negative', 'current_prompt', 'prompt', 'negative', 'camera', 'flf', 'seed', 'resolutions', - 'frame_to_skip', 'vace schedule', 'video file path', + 'frame_to_skip', 'vace schedule', 'video file path', 'middle frame path', } # also skip lora keys custom_keys = [ diff --git a/utils.py b/utils.py index ab5ed85..11165b8 100644 --- a/utils.py +++ b/utils.py @@ -46,7 +46,7 @@ DEFAULTS = { "reference switch": 1, "video file path": "", "reference image path": "", - "reference path": "", + "middle frame path": "", "flf image path": "", # --- LoRAs (name as STRING, strength as FLOAT) --- @@ -150,6 +150,15 @@ def save_snippets(snippets): json.dump(snippets, f, indent=4) os.replace(tmp, SNIPPETS_FILE) +def _migrate_key_renames(data: dict) -> None: + """Rename legacy keys to their current names.""" + for item in data.get(KEY_BATCH_DATA, []): + if not isinstance(item, dict): + continue + if 'reference path' in item and 'middle frame path' not in item: + item['middle frame path'] = item.pop('reference path') + + def _migrate_lora_keys(data: dict) -> None: """Split combined lora 'name:strength' into separate name and strength keys. @@ -208,6 +217,7 @@ def load_json(path: str | Path) -> tuple[dict[str, Any], float]: with open(path, 'r') as f: data = json.load(f) t1 = time.time() + _migrate_key_renames(data) _migrate_lora_keys(data) t2 = time.time() mtime = path.stat().st_mtime