tool/endpoint: run_workflow / validate_workflow on templates/minimax/music-video
workspace: qa-ep13
found: while running TESTER_TASK.md (episode 13), model opus via provider anthropic, against dw 0.4.0-beta.4 on lem.
What I wanted
The standing QA cast has portraits kept as shared assets (asset:qa-cast/priya-portrait.jpg). I wanted the music-video shape with an existing cast member as the singer, rather than a freshly drawn one — the same reuse dialogue-short supports.
Why I couldn't
music-video's singer is wired end to end through its own generate step. The shot step's image reference is:
{ "reference_type": "variable:image_reference_type", "from_previous_result": "draw_singer" }
from_previous_result: "draw_singer" is structural — it lives in steps[3].pipeline.arguments.references[0], not in variables. The shots list's fields are name, prompt, start_frame only, so there is no per-entry references either. The only knob exposed is singer_portrait_prompt, which changes what gets drawn, never whether an existing image is used instead.
So arguments={...} cannot express it at any level, and the workaround is to fetch the full definition with get_workflow and resubmit the entire ~120-line workflow as inline_workflow with one reference changed to "from_file": "asset:qa-cast/priya-portrait.jpg". That works (job fddbaed74355, succeeded), but it means:
- carrying a private copy of the template, which silently stops tracking upstream fixes to it — exactly the drift
#90-style composition-by-name exists to avoid;
- an
estimate.basis of unknown instead of catalog, so the run can't be priced from the template's measured history;
- the same copy for every future episode that reuses the cast.
Repro
get_workflow(name="templates/minimax/music-video") # references[0] is from_previous_result
list_workflows(shape="sequence") # lists[].shots.fields = name, prompt, start_frame
No arguments value reaches steps[3].pipeline.arguments.references[0].
expected
Some supported way to supply an existing image as <Picture 1> without copying the template. dialogue-short already has the shape of the answer — its shot references take from_file with an asset: path, which is what makes a standing cast reusable there.
The cheapest version that would have unblocked me is a singer_portrait variable defaulting to null, with the reference reading from it when set and falling back to draw_singer otherwise. Worth noting that the elision engine already makes that clean on its own: in my inline copy draw_singer became unreferenced and the plan elided it before the run (plan.elided_steps, and a matching job.warnings line), so the generate step costs nothing when a portrait is supplied — no conditional-step machinery needed.
That is a suggestion about shape, not a requirement — if there's a better fit with how templates are meant to expose references generally, or if this is better solved once across every identity-referenced template rather than in this one, that's your call.
not blocking
I got episode 13 made via the inline copy. Filing it because it's a workaround I had to invent, and the next episode reusing the cast in this shape would have to invent it again.
tool/endpoint:
run_workflow/validate_workflowontemplates/minimax/music-videoworkspace:
qa-ep13found: while running
TESTER_TASK.md(episode 13), modelopusvia provideranthropic, against dw0.4.0-beta.4onlem.What I wanted
The standing QA cast has portraits kept as shared assets (
asset:qa-cast/priya-portrait.jpg). I wanted themusic-videoshape with an existing cast member as the singer, rather than a freshly drawn one — the same reusedialogue-shortsupports.Why I couldn't
music-video's singer is wired end to end through its own generate step. The shot step's image reference is:{ "reference_type": "variable:image_reference_type", "from_previous_result": "draw_singer" }from_previous_result: "draw_singer"is structural — it lives insteps[3].pipeline.arguments.references[0], not invariables. Theshotslist's fields arename,prompt,start_frameonly, so there is no per-entryreferenceseither. The only knob exposed issinger_portrait_prompt, which changes what gets drawn, never whether an existing image is used instead.So
arguments={...}cannot express it at any level, and the workaround is to fetch the full definition withget_workflowand resubmit the entire ~120-line workflow asinline_workflowwith one reference changed to"from_file": "asset:qa-cast/priya-portrait.jpg". That works (jobfddbaed74355,succeeded), but it means:#90-style composition-by-name exists to avoid;estimate.basisofunknowninstead ofcatalog, so the run can't be priced from the template's measured history;Repro
No
argumentsvalue reachessteps[3].pipeline.arguments.references[0].expected
Some supported way to supply an existing image as
<Picture 1>without copying the template.dialogue-shortalready has the shape of the answer — its shot references takefrom_filewith anasset:path, which is what makes a standing cast reusable there.The cheapest version that would have unblocked me is a
singer_portraitvariable defaulting to null, with the reference reading from it when set and falling back todraw_singerotherwise. Worth noting that the elision engine already makes that clean on its own: in my inline copydraw_singerbecame unreferenced and the plan elided it before the run (plan.elided_steps, and a matchingjob.warningsline), so the generate step costs nothing when a portrait is supplied — no conditional-step machinery needed.That is a suggestion about shape, not a requirement — if there's a better fit with how templates are meant to expose references generally, or if this is better solved once across every identity-referenced template rather than in this one, that's your call.
not blocking
I got episode 13 made via the inline copy. Filing it because it's a workaround I had to invent, and the next episode reusing the cast in this shape would have to invent it again.