Add synchronized music-video production planning
Add measured-audio, timed-lyrics, H3 lane planning, identity relay, upload-song routing, model-specific camera contracts, LTX long-horizon planning, workflow migrations, the validated V6 example, regression coverage, and an Unreleased changelog.
This commit is contained in:
@@ -212,7 +212,7 @@ def test_minimax_h3_contract_and_splitter_compatibility():
|
||||
"continuity ledger",
|
||||
"generic real animals",
|
||||
"prior shot's resulting position and state",
|
||||
"shot size, angle, or the word handheld alone is not a camera path",
|
||||
"an incoming cut, shot size, angle, subject framing",
|
||||
"event-specific sound immediately beside its visible cause",
|
||||
"the final frame holds on",
|
||||
):
|
||||
@@ -559,13 +559,9 @@ def test_minimax_h3_ref2va_contract():
|
||||
default_t2va_prompt,
|
||||
{"minimax_h3_ref_sections_invalid"},
|
||||
),
|
||||
(
|
||||
ref_prompt.replace("<Audio 1>", "the soundtrack"),
|
||||
{"minimax_h3_ref_missing_asset_tag"},
|
||||
),
|
||||
(
|
||||
ref_prompt.replace("<Video 1>", "<Video 2>"),
|
||||
{"minimax_h3_ref_missing_asset_tag", "minimax_h3_ref_undefined_tag"},
|
||||
{"minimax_h3_ref_undefined_tag"},
|
||||
),
|
||||
(
|
||||
ref_prompt.replace(
|
||||
@@ -575,23 +571,29 @@ def test_minimax_h3_ref2va_contract():
|
||||
),
|
||||
{"minimax_h3_ref_subject_definition_invalid"},
|
||||
),
|
||||
(
|
||||
invalid_subject_usage_prompt,
|
||||
{"minimax_h3_ref_subject_usage_invalid"},
|
||||
),
|
||||
(
|
||||
ref_prompt.replace("fully_preserved", "preserved", 1),
|
||||
{"minimax_h3_ref_retention_invalid"},
|
||||
),
|
||||
)
|
||||
for invalid_prompt, expected_reasons in invalid_prompts:
|
||||
invalid_packet = _packet("", {"ready_for_generation": True, "blocked_reasons": []}, segments=[])
|
||||
invalid_packet["minimax_h3_prompt"] = invalid_prompt
|
||||
invalid_result = _split(invalid_packet, context=context, target=target)
|
||||
invalid_metadata = _metadata(invalid_result)
|
||||
assert invalid_result[13] == "", invalid_metadata
|
||||
assert invalid_result[13] == "", (expected_reasons, invalid_metadata)
|
||||
assert expected_reasons.issubset(set(invalid_metadata["blocked_reasons"])), invalid_metadata
|
||||
|
||||
repairable_prompts = (
|
||||
invalid_subject_usage_prompt,
|
||||
ref_prompt.replace("fully_preserved", "preserved", 1),
|
||||
ref_prompt.replace("<Audio 1>", "the soundtrack"),
|
||||
)
|
||||
for repairable_prompt in repairable_prompts:
|
||||
repairable_packet = _packet("", {"ready_for_generation": True, "blocked_reasons": []}, segments=[])
|
||||
repairable_packet["minimax_h3_prompt"] = repairable_prompt
|
||||
repairable_result = _split(repairable_packet, context=context, target=target)
|
||||
repairable_metadata = _metadata(repairable_result)
|
||||
assert repairable_result[13], repairable_metadata
|
||||
assert repairable_result[12] is True, repairable_metadata
|
||||
assert repairable_metadata["blocked_reasons"] == [], repairable_metadata
|
||||
|
||||
|
||||
def test_minimax_h3_ref2va_structure_repair_and_generation_gate():
|
||||
manifest = (
|
||||
|
||||
Reference in New Issue
Block a user