The 2026 video model lineup — what each one is actually good at — step 9 of 9
One last thing before we move on. Same surface as a write step — but the lesson doesn't complete until this passes.
Final drill. Synthesize the lane map into a single routing
function: route_briefs(briefs) that takes a list of briefs and
returns a list of {"name": <brief_name>, "model": <chosen_model>}
dicts in the same order.
Same routing rules as lesson step 08, evaluated in order, FIRST match wins:
needs_camera_controlTrue →"Higgsfield"budget_max_per_sec < 0.06→"Hailuo 02"needs_audioTrue ANDbudget_max_per_sec >= 0.40→"Veo 3"needs_audioTrue →"Veo 3.1 Lite"needs_image_inputTrue ANDbudget_max_per_sec < 0.20→"Kling 3.0"duration_sec >= 20→"Sora 2 Pro"- Default →
"Sora 2"
Five briefs run. Expected output:
hero_product_trailer -> Higgsfield
bulk_perf_marketing -> Hailuo 02
vo_talking_head_premium -> Veo 3
budget_social_with_vo -> Veo 3.1 Lite
long_narrative_shot -> Sora 2 Pro
One last thing before we move on. Same surface as a write step — but the lesson doesn't complete until this passes.
Final drill. Synthesize the lane map into a single routing
function: route_briefs(briefs) that takes a list of briefs and
returns a list of {"name": <brief_name>, "model": <chosen_model>}
dicts in the same order.
Same routing rules as lesson step 08, evaluated in order, FIRST match wins:
needs_camera_controlTrue →"Higgsfield"budget_max_per_sec < 0.06→"Hailuo 02"needs_audioTrue ANDbudget_max_per_sec >= 0.40→"Veo 3"needs_audioTrue →"Veo 3.1 Lite"needs_image_inputTrue ANDbudget_max_per_sec < 0.20→"Kling 3.0"duration_sec >= 20→"Sora 2 Pro"- Default →
"Sora 2"
Five briefs run. Expected output:
hero_product_trailer -> Higgsfield
bulk_perf_marketing -> Hailuo 02
vo_talking_head_premium -> Veo 3
budget_social_with_vo -> Veo 3.1 Lite
long_narrative_shot -> Sora 2 Pro
this step needs the editor
on desktop today; in the app (coming soon). save your spot and we'll bring you back here when you're ready.