LTX-Video
LTX-Video copied to clipboard
Saving Output takes significantly longer than the sampling steps.
For this part:
# Crop the padded images to the desired resolution and number of frames
(pad_left, pad_right, pad_top, pad_bottom) = padding
pad_bottom = -pad_bottom
pad_right = -pad_right
if pad_bottom == 0:
pad_bottom = images.shape[3]
if pad_right == 0:
pad_right = images.shape[4]
images = images[:, :, :num_frames, pad_top:pad_bottom, pad_left:pad_right]
for i in range(images.shape[0]):
# Gathering from B, C, F, H, W to C, F, H, W and then permuting to F, H, W, C
video_np = images[i].permute(1, 2, 3, 0).cpu().float().numpy()
# Unnormalizing images to [0, 255] range
video_np = (video_np * 255).astype(np.uint8)
fps = args.frame_rate
height, width = video_np.shape[1:3]
# In case a single image is generated
if video_np.shape[0] == 1:
output_filename = get_unique_filename(
f"image_output_{i}",
".png",
prompt=args.prompt,
seed=args.seed,
resolution=(height, width, num_frames),
dir=output_dir,
)
imageio.imwrite(output_filename, video_np[0])
else:
if args.input_image_path:
base_filename = f"img_to_vid_{i}"
else:
base_filename = f"text_to_vid_{i}"
output_filename = get_unique_filename(
base_filename,
".mp4",
prompt=args.prompt,
seed=args.seed,
resolution=(height, width, num_frames),
dir=output_dir,
)
# Write video
with imageio.get_writer(output_filename, fps=fps) as video:
for frame in video_np:
video.append_data(frame)
# Write condition image
if args.input_image_path:
reference_image = (
(
media_items_prepad[0, :, 0].permute(1, 2, 0).cpu().data.numpy()
+ 1.0
)
/ 2.0
* 255
)
imageio.imwrite(
get_unique_filename(
base_filename,
".png",
prompt=args.prompt,
seed=args.seed,
resolution=(height, width, num_frames),
dir=output_dir,
endswith="_condition",
),
reference_image.astype(np.uint8),
)
logger.warning(f"Output saved to {output_dir}")