vllm_video_params carries last_frame (include/vllm.h:948) and the LTX-2.5
engine serves it: wants_last_frame places the image as a
VideoConditionByKeyframeIndex at pixel frame frames - 1
(src/vllm/multimodal/ltx2_video.cpp, the last-frame arm of the phase loop),
gated by test_ltx2_video under row LTX25-TOKEN-APPEND
(#930).
examples/ltx2_gen/main.cpp parses --first-frame (:333) and assigns
vp.first_frame (:413) and never reads last_frame at all — grep -c last_frame examples/ltx2_gen/main.cpp returns 0 for the field. So the closing
keyframe is reachable from the C API and not from the shipped CLI.
This became load-bearing with row LTX25-KEYFRAME-INTERP
(#1096):
KeyframeInterpolationPipeline exists to generate the motion BETWEEN pinned
keyframes, and with one slot the CLI can only ask for half of that. Fixed in
flow by that row, because it is the first caller the gap actually narrows: one
--last-frame flag, parsed and assigned beside --first-frame, sharing the
same --image-crf and noise_aug the two slots already share.
vllm_video_paramscarrieslast_frame(include/vllm.h:948) and the LTX-2.5engine serves it:
wants_last_frameplaces the image as aVideoConditionByKeyframeIndexat pixel frameframes - 1(
src/vllm/multimodal/ltx2_video.cpp, the last-frame arm of the phase loop),gated by
test_ltx2_videounder rowLTX25-TOKEN-APPEND(#930).
examples/ltx2_gen/main.cppparses--first-frame(:333) and assignsvp.first_frame(:413) and never readslast_frameat all —grep -c last_frame examples/ltx2_gen/main.cppreturns 0 for the field. So the closingkeyframe is reachable from the C API and not from the shipped CLI.
This became load-bearing with row
LTX25-KEYFRAME-INTERP(#1096):
KeyframeInterpolationPipelineexists to generate the motion BETWEEN pinnedkeyframes, and with one slot the CLI can only ask for half of that. Fixed in
flow by that row, because it is the first caller the gap actually narrows: one
--last-frameflag, parsed and assigned beside--first-frame, sharing thesame
--image-crfandnoise_augthe two slots already share.