Skip to content

dialogue-short: shots can reference existing cast portraits with from_file, but the two Z-Image draw steps still run and nothing documents the substitution #109

Description

@dkackman

Summary

templates/minimax/dialogue-short can be driven from an existing cast — a shot entry's
references take from_file: "asset:…" for the subject pictures just as they do for voices, and
it works — but the two draw_character_a / draw_character_b Z-Image steps run unconditionally
and their portraits are then thrown away. For the recurring-cast case the template's own
description is built around ("character consistency across cuts comes from referencing the same
portraits in every shot"), an episode pays for two portraits it does not use, and — more to the
point — nothing in the consumer surface says the substitution is possible at all.

Tool / endpoint

run_workflow / validate_workflow with workflow_path: templates/minimax/dialogue-short;
list_workflows / get_workflow for the discoverability half.

Repro

Workspace qa-ep7, server 0.4.0-beta.3 on lem. Job 48000580aec1, succeeded in 894.1 s
against a 16.8 min derived quote. Two shots, match_levels: "rms", and a shots list in which
every reference is a file, no from_previous_result anywhere:

{"name": "ledger", "num_frames": 124, "references": [
  {"reference_type": "diffusers.modular_pipelines.minimax_h3.MiniMaxH3ImageReference",
   "from_file": "asset:qa-cast/priya-portrait.jpg"},
  {"reference_type": "diffusers.modular_pipelines.minimax_h3.MiniMaxH3ImageReference",
   "from_file": "asset:qa-cast/hal-portrait.jpg"},
  {"reference_type": "diffusers.modular_pipelines.minimax_h3.MiniMaxH3AudioReference",
   "from_file": "asset:qa-cast/priya-voice.wav"},
  {"reference_type": "diffusers.modular_pipelines.minimax_h3.MiniMaxH3AudioReference",
   "from_file": "asset:qa-cast/hal-voice.wav"}], "prompt": ""}

validate_workflowvalid: true, plan.steps: 5, list_entries.shots: 2,
estimate 16.8 min basis derived. The run's manifest then carries all five steps, including:

draw_character_a → …/intermediate/…draw_character_a.0-0.0.jpg
draw_character_b → …/intermediate/…draw_character_b.1-0.0.jpg

— two portraits nothing in the run references. The first H3 step began ~55 s into the job, so the
two discarded draws cost roughly that.

Expected

The template supports a cast that already exists, and says so. Concretely, in rough order of value:

  1. A step that nothing references does not run. If the for_each shots list contains no
    from_previous_result naming draw_character_a/_b, skip that step. This is a general engine
    property, not a template one — and a nice one — but it is also the biggest ask here, so treat it
    as the option to argue with rather than the one to implement first.
  2. Cheaper and template-local: make the portraits variables —
    character_a_portrait: null / character_b_portrait: null, an asset reference when given,
    with the shots' default entries referencing whichever applies. The voices already work exactly
    this way (character_a_voice: null, from_file: "variable:character_a_voice"), so this is the
    same idiom applied to the picture side, and it is what a reader of the variable list would
    expect to find there.
  3. At minimum, documentation. Nothing in list_workflows, get_workflow's description, or
    the dw:minimax-h3 skill says a shot reference can be a file instead of a previous result. I
    found it by reading the default shots list and noticing the voice entries used from_file,
    then guessing that the image entries would take it too. A recurring cast across episodes is the
    headline use case for this template; reaching it should not require inferring the mechanism.

plan.estimate should also drop the skipped/removed portrait work, if (1) or (2) lands.

Actual

Both Z-Image steps always run; their output is discarded whenever the shots reference files; and
the capability is undocumented.

Notes

Found while running TESTER_TASK.md — this is episode 7 of the QA series and the first one to put
both recurring characters in the same scene, which is precisely the reuse case the exercise exists
to exercise. The episode itself came out fine (asset:qa-cast/ep7-episode.mp4, 248 frames /
10.35 s / 24 fps / stereo / rms-matched to -20.3 dBFS), so this is friction and cost, not a
correctness bug.

Filed by the tester agent, model opus via provider anthropic.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    owner:testerTester's turn to actstatus:verifiedTester confirmed the fix via a real MCP call

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions