Within the bounded Wan+LTX-2 scope: - Wan2.2-A14B MoE now GENERATES on a single 80GB GPU via CPU offload (TorchWanDiT offload_group): the two 14B experts live on CPU and only the active one is swapped onto the GPU at the boundary- timestep transition (a single swap, not per-step). GPU-verified: 60GB peak (vs 79GB OOM), produced wan22_a14b_lion.mp4 (17x480x832, std 54.7, motion 8.36). Single-expert Wan stays resident. - LTX-2 base (single-stage) port: build_ltx2_base_card + build_ltx2_base_program reuse the LTX-2 adapters at FULL latent res with a request-driven many-step flow-match (LTX2DenoiseLoop full_res/ request_steps/base_flow_sigmas; distilled base/refine path preserved via False defaults). The SAME single-stage card serves LTX-2.3-Distilled (also single-stage: no spatial_upsampler) — dispatched by the new has_spatial_upsampler discriminator in _select_builders. v2_basic_ltx2.py added; VideoGenerator gains shutdown() for API parity. - Fixes: from_config 'os' scoping (shadowed module import); LTX-2 upsampler per_channel_statistics source (the AE's .decoder, not the top-level module). Verification status: A14B offload, the upsampler, and the arch-dispatch refactor were GPU-verified earlier this session. LTX-2 base/2.3 are CPU-verified (cards/programs build, dispatch routes, schedule correct); their GPU smoke tests were pending when the box was rescheduled aarch64->x86 mid-session, which broke the aarch64 venv (numpy/torch unrunnable on x86) — GPU re-verify blocked on the env.
30 lines
1.5 KiB
Python
30 lines
1.5 KiB
Python
"""v2 port of basic_ltx2.py — LTX-2 base (single-stage) through the v2 VideoGenerator.
|
|
|
|
Same convenience API as upstream; only delta is importing VideoGenerator from v2. LTX-2 base is the
|
|
single-stage (non-distilled) model: the v2 single-stage card (build_ltx2_base_card) runs a request-driven
|
|
many-step flow-match at FULL latent res (no distilled base/refine split, no spatial upsampler), reusing
|
|
the LTX-2 DiT/VAE/Gemma adapters. The SAME single-stage card also serves LTX-2.3-Distilled (which is also
|
|
single-stage) — just pass fewer num_inference_steps for the few-step distilled schedule.
|
|
|
|
NOTE: modest res/frames here — upstream defaults to 1088x1920x121, which on an 18.88B base is very slow;
|
|
raise them for full quality. v2 bring-up: single-GPU, resident, SDPA.
|
|
"""
|
|
from v2 import VideoGenerator
|
|
|
|
PROMPT = ("A warm sunny backyard, cinematic close-up of two people talking; the camera slowly pans right "
|
|
"to reveal a grandfather in the garden wearing enormous butterfly wings, flapping his arms like "
|
|
"he is trying to take off. Deadpan, absurd, quietly tragic.")
|
|
|
|
|
|
def main() -> None:
|
|
generator = VideoGenerator.from_pretrained("Davids048/LTX2-Base-Diffusers", num_gpus=1)
|
|
video = generator.generate_video(
|
|
prompt=PROMPT, output_path="v2_video_samples_ltx2_base", output_video_name="ltx2_base_backyard",
|
|
save_video=True, num_frames=25, height=512, width=768, num_inference_steps=30)
|
|
print(f"Output: {video.video_path}")
|
|
generator.shutdown()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|