Old project/workflow names and browser settings migrate on load; /funpack redirects to /fun. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016acRss69eH1235eRdFTZHY
28 lines
1.5 KiB
Python
28 lines
1.5 KiB
Python
from modules.output.save import upgrade
|
|
|
|
OUT = {"VAEDecode": ["IMAGE"], "Cut": ["IMAGE", "AUDIO"], "CreateVideo": ["VIDEO"], "SaveVideo": []}.get
|
|
|
|
|
|
def test_old_pair_becomes_one_save():
|
|
role = {"at": "project.video", "input": "fps", "drives": "fps"}
|
|
slots = [{"id": "cut", "node": "Cut", "inputs": {}},
|
|
{"id": "video", "node": "CreateVideo", "roles": [role], "inputs": {"images": ["cut", 0], "audio": ["cut", 1], "fps": 25.0}},
|
|
{"id": "save", "node": "SaveVideo", "inputs": {"video": ["video", 0], "filename_prefix": "X"}}]
|
|
got = upgrade(slots, lambda n: OUT(n) or [])
|
|
assert [s["id"] for s in got] == ["cut", "save"]
|
|
assert got[1] == {"id": "save", "node": "FunUISaveVideo", "roles": [role],
|
|
"inputs": {"filename_prefix": "X", "images": ["cut", 0], "audio": ["cut", 1], "fps": 25.0}}
|
|
assert slots[2]["node"] == "SaveVideo" # the caller's slots are left alone
|
|
|
|
|
|
def test_unfed_save_takes_the_loose_picture_source():
|
|
slots = [{"id": "cut", "node": "Cut", "inputs": {}}, {"id": "save", "node": "SaveVideo", "inputs": {}}]
|
|
got = upgrade(slots, lambda n: OUT(n) or [])
|
|
assert got[1]["inputs"] == {"filename_prefix": "FunUI", "images": ["cut", 0], "audio": ["cut", 1]}
|
|
|
|
|
|
def test_unfed_save_with_two_candidates_is_left_alone():
|
|
slots = [{"id": "a", "node": "Cut", "inputs": {}}, {"id": "b", "node": "VAEDecode", "inputs": {}},
|
|
{"id": "save", "node": "SaveVideo", "inputs": {}}]
|
|
assert upgrade(slots, lambda n: OUT(n) or [])[2]["node"] == "SaveVideo"
|