Upload folder using huggingface_hub
Browse files- build_manifest_v2.py +68 -0
- check_quanto.py +64 -0
- extract_windows.sh +8 -0
- iso.py +26 -0
- ltx_co_manifest.json +538 -0
- ltx_co_manifest_recolored.json +1 -0
- ltx_co_manifest_v2.json +654 -0
- ltx_driver.py +186 -0
- ltx_loadonce.py +422 -0
- ltx_loadonce_fp8.py +66 -0
- ltx_seamless.py +54 -0
- ltx_seamless_v2.py +212 -0
- mem_snap.py +46 -0
- vae_diag.py +166 -0
build_manifest_v2.py
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json, copy, os
|
| 2 |
+
from collections import Counter
|
| 3 |
+
|
| 4 |
+
m = json.load(open('/workspace/ltx_co_manifest_recolored.json'))
|
| 5 |
+
WIN_SIZE = 81
|
| 6 |
+
KF_DIR = '/workspace/q_kf_recolored'
|
| 7 |
+
|
| 8 |
+
cuts_raw = [
|
| 9 |
+
(7, 56, 623),
|
| 10 |
+
(9, 14, 743),
|
| 11 |
+
(20, 39, 1659),
|
| 12 |
+
(23, 7, 1870),
|
| 13 |
+
(32, 49, 2641),
|
| 14 |
+
(39, 22, 3181),
|
| 15 |
+
(41, 52, 3373),
|
| 16 |
+
(43, 58, 3541),
|
| 17 |
+
(49, 58, 4027),
|
| 18 |
+
(50, 30, 4080),
|
| 19 |
+
(51, 10, 4141),
|
| 20 |
+
(66, 41, 5387),
|
| 21 |
+
]
|
| 22 |
+
|
| 23 |
+
CUT_AT_START_THRESH = 15
|
| 24 |
+
new_manifest = copy.deepcopy(m)
|
| 25 |
+
|
| 26 |
+
for wi, fi, abs_cut in cuts_raw:
|
| 27 |
+
w = new_manifest[wi]
|
| 28 |
+
kf_name = 'ref_%06d.png' % abs_cut
|
| 29 |
+
kf_path = KF_DIR + '/' + kf_name
|
| 30 |
+
kf_exists = os.path.exists(kf_path)
|
| 31 |
+
|
| 32 |
+
if fi <= CUT_AT_START_THRESH:
|
| 33 |
+
w['cut_at_start'] = True
|
| 34 |
+
print('w%d: cut_at_start=True (fi=%d, kf_pos=%d)' % (wi, fi, w['kf_pos']))
|
| 35 |
+
else:
|
| 36 |
+
if kf_exists:
|
| 37 |
+
anchor_pos = min(fi + 2, WIN_SIZE - 1)
|
| 38 |
+
if 'extra_anchors' not in w:
|
| 39 |
+
w['extra_anchors'] = []
|
| 40 |
+
w['extra_anchors'].append({'path': kf_path, 'pos': anchor_pos, 'weight': 0.95})
|
| 41 |
+
print('w%d: extra_anchor %s @ pos %d (cut@%d)' % (wi, kf_name, anchor_pos, fi))
|
| 42 |
+
else:
|
| 43 |
+
print('w%d: GEEN kf %s, skip' % (wi, kf_name))
|
| 44 |
+
|
| 45 |
+
if wi == 50 and fi == 30:
|
| 46 |
+
old_pos = w['kf_pos']
|
| 47 |
+
w['kf_pos'] = fi + 2 # 32 ipv 52
|
| 48 |
+
print('w50: kf_pos %d -> %d' % (old_pos, w['kf_pos']))
|
| 49 |
+
|
| 50 |
+
# Scene-ID toewijzen
|
| 51 |
+
scene_id = 0
|
| 52 |
+
for i, w in enumerate(new_manifest):
|
| 53 |
+
if w.get('cut_at_start') and i > 0:
|
| 54 |
+
scene_id += 1
|
| 55 |
+
w['scene_id'] = scene_id
|
| 56 |
+
|
| 57 |
+
scene_counts = Counter(w['scene_id'] for w in new_manifest)
|
| 58 |
+
print('\nScene-verdeling (parallel-klaar):')
|
| 59 |
+
for sc in sorted(scene_counts):
|
| 60 |
+
ws = [i for i, ww in enumerate(new_manifest) if ww['scene_id'] == sc]
|
| 61 |
+
cnt = scene_counts[sc]
|
| 62 |
+
print(' scene %d: w%d-w%d (%d vensters, ~%dmin %ds)' % (sc, ws[0], ws[-1], cnt, cnt*63//60, cnt*63%60))
|
| 63 |
+
|
| 64 |
+
out_path = '/workspace/ltx_co_manifest_v2.json'
|
| 65 |
+
with open(out_path, 'w') as f:
|
| 66 |
+
json.dump(new_manifest, f, indent=2)
|
| 67 |
+
print('\nGeschreven: ' + out_path)
|
| 68 |
+
print('Totaal: %d vensters' % len(new_manifest))
|
check_quanto.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import sys
|
| 2 |
+
sys.path.insert(0,'/workspace/LTX-2/packages/ltx-pipelines/src')
|
| 3 |
+
sys.path.insert(0,'/workspace/LTX-2/packages/ltx-core/src')
|
| 4 |
+
import torch
|
| 5 |
+
from optimum.quanto import quantize, qfloat8, freeze
|
| 6 |
+
from ltx_pipelines.ic_lora import ICLoraPipeline
|
| 7 |
+
from ltx_core.loader import LoraPathStrengthAndSDOps, LTXV_LORA_COMFY_RENAMING_MAP
|
| 8 |
+
from ltx_pipelines.utils.types import OffloadMode
|
| 9 |
+
|
| 10 |
+
pipe = ICLoraPipeline(
|
| 11 |
+
distilled_checkpoint_path='/workspace/models/LTX-2.3/ltx-2.3-22b-distilled.safetensors',
|
| 12 |
+
spatial_upsampler_path='/workspace/models/LTX-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors',
|
| 13 |
+
gemma_root='/workspace/models/LTX-2',
|
| 14 |
+
loras=(LoraPathStrengthAndSDOps('/workspace/models/loras/ltx-2.3-22b-ic-lora-colorization-0.9.safetensors',1.0,LTXV_LORA_COMFY_RENAMING_MAP),),
|
| 15 |
+
quantization=None, offload_mode=OffloadMode('none'),
|
| 16 |
+
)
|
| 17 |
+
|
| 18 |
+
with torch.no_grad():
|
| 19 |
+
dit = pipe.stage_1._build_transformer()
|
| 20 |
+
|
| 21 |
+
print("VRAM before quantize:", torch.cuda.memory_allocated()//1024**3, "GB")
|
| 22 |
+
quantize(dit, weights=qfloat8)
|
| 23 |
+
|
| 24 |
+
print("--- patchify_proj modules after quantize (before freeze) ---")
|
| 25 |
+
for name, mod in dit.named_modules():
|
| 26 |
+
if 'patchify_proj' in name:
|
| 27 |
+
w = getattr(mod, 'weight', 'NO_ATTR')
|
| 28 |
+
print(name, type(mod).__name__, "weight-type:", type(w).__name__ if w is not None else "None")
|
| 29 |
+
|
| 30 |
+
print("\nFreezing...")
|
| 31 |
+
freeze(dit)
|
| 32 |
+
print("Freeze done")
|
| 33 |
+
|
| 34 |
+
print("--- patchify_proj modules after freeze ---")
|
| 35 |
+
for name, mod in dit.named_modules():
|
| 36 |
+
if 'patchify_proj' in name:
|
| 37 |
+
w = getattr(mod, 'weight', 'NO_ATTR')
|
| 38 |
+
qw = getattr(mod, 'qweight', 'NO_ATTR') if hasattr(mod, 'qweight') else 'N/A'
|
| 39 |
+
print(name, type(mod).__name__, "weight:", w if w is None else type(w).__name__, "qweight:", type(qw).__name__ if not isinstance(qw,str) else qw)
|
| 40 |
+
|
| 41 |
+
print("VRAM after freeze:", torch.cuda.memory_allocated()//1024**3, "GB")
|
| 42 |
+
|
| 43 |
+
print('=== Check simple_preprocessor.patchify_proj ===')
|
| 44 |
+
# velocity_model is inside X0Model
|
| 45 |
+
vm = dit.model._model if hasattr(dit.model,'_model') else None
|
| 46 |
+
if vm is None:
|
| 47 |
+
for attr in ['_model','model','velocity_model']:
|
| 48 |
+
vm = getattr(dit, attr, None) or getattr(getattr(dit,'model',None), attr, None)
|
| 49 |
+
if vm: break
|
| 50 |
+
|
| 51 |
+
if vm:
|
| 52 |
+
vap = getattr(vm, 'video_args_preprocessor', None)
|
| 53 |
+
if vap:
|
| 54 |
+
print('video_args_preprocessor found:', type(vap).__name__)
|
| 55 |
+
sp = getattr(vap, 'simple_preprocessor', None) or vap
|
| 56 |
+
pp = getattr(sp, 'patchify_proj', None)
|
| 57 |
+
if pp:
|
| 58 |
+
w = getattr(pp, 'weight', 'NO_ATTR')
|
| 59 |
+
print('simple_preprocessor.patchify_proj type:', type(pp).__name__)
|
| 60 |
+
print('patchify_proj.weight:', w if w is None else (type(w).__name__, getattr(w,'shape','?')))
|
| 61 |
+
else:
|
| 62 |
+
print('no video_args_preprocessor')
|
| 63 |
+
else:
|
| 64 |
+
print('no velocity_model found; dit attrs:', [a for a in dir(dit) if not a.startswith('_')][:20])
|
extract_windows.sh
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
cd /workspace
|
| 3 |
+
mkdir -p ltx_windows
|
| 4 |
+
for K in $(seq 0 66); do
|
| 5 |
+
s=$((K*81)); e=$((s+81))
|
| 6 |
+
ffmpeg -y -i schindler_720.mp4 -vf "trim=start_frame=${s}:end_frame=${e},setpts=PTS-STARTPTS,scale=960:544" -an ltx_windows/w${K}.mp4 2>/dev/null
|
| 7 |
+
done
|
| 8 |
+
echo "DONE_EXTRACT $(ls ltx_windows/*.mp4 2>/dev/null | wc -l)"
|
iso.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os, numpy as np
|
| 2 |
+
from PIL import Image
|
| 3 |
+
kf="/workspace/q_kf/"; yel=blu=met=ok=0; n=0
|
| 4 |
+
for f in sorted(os.listdir(kf)):
|
| 5 |
+
if not f.lower().endswith(('.png','.jpg','.jpeg')): continue
|
| 6 |
+
a=np.array(Image.open(kf+f).convert('RGB')).astype(np.float32); n+=1
|
| 7 |
+
g=0.299*a[...,0]+0.587*a[...,1]+0.114*a[...,2]
|
| 8 |
+
flags=[]
|
| 9 |
+
mw=g>210
|
| 10 |
+
if mw.sum()>300:
|
| 11 |
+
r,gg,b=a[...,0][mw].mean(),a[...,1][mw].mean(),a[...,2][mw].mean()
|
| 12 |
+
yb=(r+gg)/2-b
|
| 13 |
+
if yb>8: flags.append(f"WIT->GEEL({yb:.1f})"); yel+=1
|
| 14 |
+
md=(g>35)&(g<95)
|
| 15 |
+
if md.sum()>500:
|
| 16 |
+
r,gg,b=a[...,0][md].mean(),a[...,1][md].mean(),a[...,2][md].mean()
|
| 17 |
+
bb=b-gg
|
| 18 |
+
if bb>5: flags.append(f"UNIFORM->BLAUW({bb:.1f})"); blu+=1
|
| 19 |
+
mm=(g>80)&(g<160)
|
| 20 |
+
if mm.sum()>1000:
|
| 21 |
+
r,gg,b=a[...,0][mm],a[...,1][mm],a[...,2][mm]
|
| 22 |
+
cv=float(np.std(r-gg))+float(np.std(b-gg))
|
| 23 |
+
if cv>12: flags.append(f"METAAL-VLEK({cv:.1f})"); met+=1
|
| 24 |
+
if flags and (yel+blu+met)<=14: print(f"{f}: {', '.join(flags)}")
|
| 25 |
+
if not flags: ok+=1
|
| 26 |
+
print(f"\n=== {n} keyframes: wit->geel={yel}, uniform->blauw={blu}, metaal-vlek={met}, schoon={ok} ===")
|
ltx_co_manifest.json
ADDED
|
@@ -0,0 +1,538 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"gray": "/workspace/ltx_windows/w0.mp4",
|
| 4 |
+
"keyframe": "/workspace/q_kf/ref_000000.png",
|
| 5 |
+
"kf_pos": 0,
|
| 6 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 7 |
+
"out": "/workspace/ltx_co_out/w0.mp4",
|
| 8 |
+
"cut_at_start": true
|
| 9 |
+
},
|
| 10 |
+
{
|
| 11 |
+
"gray": "/workspace/ltx_windows/w1.mp4",
|
| 12 |
+
"keyframe": "/workspace/q_kf/ref_000150.png",
|
| 13 |
+
"kf_pos": 69,
|
| 14 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 15 |
+
"out": "/workspace/ltx_co_out/w1.mp4",
|
| 16 |
+
"cut_at_start": false
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"gray": "/workspace/ltx_windows/w2.mp4",
|
| 20 |
+
"keyframe": "/workspace/q_kf/ref_000225.png",
|
| 21 |
+
"kf_pos": 63,
|
| 22 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 23 |
+
"out": "/workspace/ltx_co_out/w2.mp4",
|
| 24 |
+
"cut_at_start": false
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"gray": "/workspace/ltx_windows/w3.mp4",
|
| 28 |
+
"keyframe": "/workspace/q_kf/ref_000300.png",
|
| 29 |
+
"kf_pos": 57,
|
| 30 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 31 |
+
"out": "/workspace/ltx_co_out/w3.mp4",
|
| 32 |
+
"cut_at_start": false
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"gray": "/workspace/ltx_windows/w4.mp4",
|
| 36 |
+
"keyframe": "/workspace/q_kf/ref_000375.png",
|
| 37 |
+
"kf_pos": 51,
|
| 38 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 39 |
+
"out": "/workspace/ltx_co_out/w4.mp4",
|
| 40 |
+
"cut_at_start": false
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"gray": "/workspace/ltx_windows/w5.mp4",
|
| 44 |
+
"keyframe": "/workspace/q_kf/ref_000450.png",
|
| 45 |
+
"kf_pos": 45,
|
| 46 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 47 |
+
"out": "/workspace/ltx_co_out/w5.mp4",
|
| 48 |
+
"cut_at_start": false
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"gray": "/workspace/ltx_windows/w6.mp4",
|
| 52 |
+
"keyframe": "/workspace/q_kf/ref_000525.png",
|
| 53 |
+
"kf_pos": 39,
|
| 54 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 55 |
+
"out": "/workspace/ltx_co_out/w6.mp4",
|
| 56 |
+
"cut_at_start": false
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"gray": "/workspace/ltx_windows/w7.mp4",
|
| 60 |
+
"keyframe": "/workspace/q_kf/ref_000600.png",
|
| 61 |
+
"kf_pos": 33,
|
| 62 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 63 |
+
"out": "/workspace/ltx_co_out/w7.mp4",
|
| 64 |
+
"cut_at_start": false
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"gray": "/workspace/ltx_windows/w8.mp4",
|
| 68 |
+
"keyframe": "/workspace/q_kf/ref_000698.png",
|
| 69 |
+
"kf_pos": 50,
|
| 70 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 71 |
+
"out": "/workspace/ltx_co_out/w8.mp4",
|
| 72 |
+
"cut_at_start": false
|
| 73 |
+
},
|
| 74 |
+
{
|
| 75 |
+
"gray": "/workspace/ltx_windows/w9.mp4",
|
| 76 |
+
"keyframe": "/workspace/q_kf/ref_000743.png",
|
| 77 |
+
"kf_pos": 14,
|
| 78 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 79 |
+
"out": "/workspace/ltx_co_out/w9.mp4",
|
| 80 |
+
"cut_at_start": false
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"gray": "/workspace/ltx_windows/w10.mp4",
|
| 84 |
+
"keyframe": "/workspace/q_kf/ref_000818.png",
|
| 85 |
+
"kf_pos": 8,
|
| 86 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 87 |
+
"out": "/workspace/ltx_co_out/w10.mp4",
|
| 88 |
+
"cut_at_start": false
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"gray": "/workspace/ltx_windows/w11.mp4",
|
| 92 |
+
"keyframe": "/workspace/q_kf/ref_000893.png",
|
| 93 |
+
"kf_pos": 2,
|
| 94 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 95 |
+
"out": "/workspace/ltx_co_out/w11.mp4",
|
| 96 |
+
"cut_at_start": false
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"gray": "/workspace/ltx_windows/w12.mp4",
|
| 100 |
+
"keyframe": "/workspace/q_kf/ref_001043.png",
|
| 101 |
+
"kf_pos": 71,
|
| 102 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 103 |
+
"out": "/workspace/ltx_co_out/w12.mp4",
|
| 104 |
+
"cut_at_start": false
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"gray": "/workspace/ltx_windows/w13.mp4",
|
| 108 |
+
"keyframe": "/workspace/q_kf/ref_001118.png",
|
| 109 |
+
"kf_pos": 65,
|
| 110 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 111 |
+
"out": "/workspace/ltx_co_out/w13.mp4",
|
| 112 |
+
"cut_at_start": false
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"gray": "/workspace/ltx_windows/w14.mp4",
|
| 116 |
+
"keyframe": "/workspace/q_kf/ref_001193.png",
|
| 117 |
+
"kf_pos": 59,
|
| 118 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 119 |
+
"out": "/workspace/ltx_co_out/w14.mp4",
|
| 120 |
+
"cut_at_start": false
|
| 121 |
+
},
|
| 122 |
+
{
|
| 123 |
+
"gray": "/workspace/ltx_windows/w15.mp4",
|
| 124 |
+
"keyframe": "/workspace/q_kf/ref_001268.png",
|
| 125 |
+
"kf_pos": 53,
|
| 126 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 127 |
+
"out": "/workspace/ltx_co_out/w15.mp4",
|
| 128 |
+
"cut_at_start": false
|
| 129 |
+
},
|
| 130 |
+
{
|
| 131 |
+
"gray": "/workspace/ltx_windows/w16.mp4",
|
| 132 |
+
"keyframe": "/workspace/q_kf/ref_001343.png",
|
| 133 |
+
"kf_pos": 47,
|
| 134 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 135 |
+
"out": "/workspace/ltx_co_out/w16.mp4",
|
| 136 |
+
"cut_at_start": false
|
| 137 |
+
},
|
| 138 |
+
{
|
| 139 |
+
"gray": "/workspace/ltx_windows/w17.mp4",
|
| 140 |
+
"keyframe": "/workspace/q_kf/ref_001418.png",
|
| 141 |
+
"kf_pos": 41,
|
| 142 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 143 |
+
"out": "/workspace/ltx_co_out/w17.mp4",
|
| 144 |
+
"cut_at_start": false
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"gray": "/workspace/ltx_windows/w18.mp4",
|
| 148 |
+
"keyframe": "/workspace/q_kf/ref_001493.png",
|
| 149 |
+
"kf_pos": 35,
|
| 150 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 151 |
+
"out": "/workspace/ltx_co_out/w18.mp4",
|
| 152 |
+
"cut_at_start": false
|
| 153 |
+
},
|
| 154 |
+
{
|
| 155 |
+
"gray": "/workspace/ltx_windows/w19.mp4",
|
| 156 |
+
"keyframe": "/workspace/q_kf/ref_001568.png",
|
| 157 |
+
"kf_pos": 29,
|
| 158 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 159 |
+
"out": "/workspace/ltx_co_out/w19.mp4",
|
| 160 |
+
"cut_at_start": false
|
| 161 |
+
},
|
| 162 |
+
{
|
| 163 |
+
"gray": "/workspace/ltx_windows/w20.mp4",
|
| 164 |
+
"keyframe": "/workspace/q_kf/ref_001643.png",
|
| 165 |
+
"kf_pos": 23,
|
| 166 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 167 |
+
"out": "/workspace/ltx_co_out/w20.mp4",
|
| 168 |
+
"cut_at_start": false
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"gray": "/workspace/ltx_windows/w21.mp4",
|
| 172 |
+
"keyframe": "/workspace/q_kf/ref_001734.png",
|
| 173 |
+
"kf_pos": 33,
|
| 174 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 175 |
+
"out": "/workspace/ltx_co_out/w21.mp4",
|
| 176 |
+
"cut_at_start": false
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"gray": "/workspace/ltx_windows/w22.mp4",
|
| 180 |
+
"keyframe": "/workspace/q_kf/ref_001809.png",
|
| 181 |
+
"kf_pos": 27,
|
| 182 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 183 |
+
"out": "/workspace/ltx_co_out/w22.mp4",
|
| 184 |
+
"cut_at_start": false
|
| 185 |
+
},
|
| 186 |
+
{
|
| 187 |
+
"gray": "/workspace/ltx_windows/w23.mp4",
|
| 188 |
+
"keyframe": "/workspace/q_kf/ref_001870.png",
|
| 189 |
+
"kf_pos": 7,
|
| 190 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 191 |
+
"out": "/workspace/ltx_co_out/w23.mp4",
|
| 192 |
+
"cut_at_start": false
|
| 193 |
+
},
|
| 194 |
+
{
|
| 195 |
+
"gray": "/workspace/ltx_windows/w24.mp4",
|
| 196 |
+
"keyframe": "/workspace/q_kf/ref_001945.png",
|
| 197 |
+
"kf_pos": 1,
|
| 198 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 199 |
+
"out": "/workspace/ltx_co_out/w24.mp4",
|
| 200 |
+
"cut_at_start": false
|
| 201 |
+
},
|
| 202 |
+
{
|
| 203 |
+
"gray": "/workspace/ltx_windows/w25.mp4",
|
| 204 |
+
"keyframe": "/workspace/q_kf/ref_002095.png",
|
| 205 |
+
"kf_pos": 70,
|
| 206 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 207 |
+
"out": "/workspace/ltx_co_out/w25.mp4",
|
| 208 |
+
"cut_at_start": false
|
| 209 |
+
},
|
| 210 |
+
{
|
| 211 |
+
"gray": "/workspace/ltx_windows/w26.mp4",
|
| 212 |
+
"keyframe": "/workspace/q_kf/ref_002170.png",
|
| 213 |
+
"kf_pos": 64,
|
| 214 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 215 |
+
"out": "/workspace/ltx_co_out/w26.mp4",
|
| 216 |
+
"cut_at_start": false
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"gray": "/workspace/ltx_windows/w27.mp4",
|
| 220 |
+
"keyframe": "/workspace/q_kf/ref_002245.png",
|
| 221 |
+
"kf_pos": 58,
|
| 222 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 223 |
+
"out": "/workspace/ltx_co_out/w27.mp4",
|
| 224 |
+
"cut_at_start": false
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"gray": "/workspace/ltx_windows/w28.mp4",
|
| 228 |
+
"keyframe": "/workspace/q_kf/ref_002320.png",
|
| 229 |
+
"kf_pos": 52,
|
| 230 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 231 |
+
"out": "/workspace/ltx_co_out/w28.mp4",
|
| 232 |
+
"cut_at_start": false
|
| 233 |
+
},
|
| 234 |
+
{
|
| 235 |
+
"gray": "/workspace/ltx_windows/w29.mp4",
|
| 236 |
+
"keyframe": "/workspace/q_kf/ref_002395.png",
|
| 237 |
+
"kf_pos": 46,
|
| 238 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 239 |
+
"out": "/workspace/ltx_co_out/w29.mp4",
|
| 240 |
+
"cut_at_start": false
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"gray": "/workspace/ltx_windows/w30.mp4",
|
| 244 |
+
"keyframe": "/workspace/q_kf/ref_002470.png",
|
| 245 |
+
"kf_pos": 40,
|
| 246 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 247 |
+
"out": "/workspace/ltx_co_out/w30.mp4",
|
| 248 |
+
"cut_at_start": false
|
| 249 |
+
},
|
| 250 |
+
{
|
| 251 |
+
"gray": "/workspace/ltx_windows/w31.mp4",
|
| 252 |
+
"keyframe": "/workspace/q_kf/ref_002545.png",
|
| 253 |
+
"kf_pos": 34,
|
| 254 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 255 |
+
"out": "/workspace/ltx_co_out/w31.mp4",
|
| 256 |
+
"cut_at_start": false
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"gray": "/workspace/ltx_windows/w32.mp4",
|
| 260 |
+
"keyframe": "/workspace/q_kf/ref_002620.png",
|
| 261 |
+
"kf_pos": 28,
|
| 262 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 263 |
+
"out": "/workspace/ltx_co_out/w32.mp4",
|
| 264 |
+
"cut_at_start": false
|
| 265 |
+
},
|
| 266 |
+
{
|
| 267 |
+
"gray": "/workspace/ltx_windows/w33.mp4",
|
| 268 |
+
"keyframe": "/workspace/q_kf/ref_002716.png",
|
| 269 |
+
"kf_pos": 43,
|
| 270 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 271 |
+
"out": "/workspace/ltx_co_out/w33.mp4",
|
| 272 |
+
"cut_at_start": false
|
| 273 |
+
},
|
| 274 |
+
{
|
| 275 |
+
"gray": "/workspace/ltx_windows/w34.mp4",
|
| 276 |
+
"keyframe": "/workspace/q_kf/ref_002791.png",
|
| 277 |
+
"kf_pos": 37,
|
| 278 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 279 |
+
"out": "/workspace/ltx_co_out/w34.mp4",
|
| 280 |
+
"cut_at_start": false
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"gray": "/workspace/ltx_windows/w35.mp4",
|
| 284 |
+
"keyframe": "/workspace/q_kf/ref_002866.png",
|
| 285 |
+
"kf_pos": 31,
|
| 286 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 287 |
+
"out": "/workspace/ltx_co_out/w35.mp4",
|
| 288 |
+
"cut_at_start": false
|
| 289 |
+
},
|
| 290 |
+
{
|
| 291 |
+
"gray": "/workspace/ltx_windows/w36.mp4",
|
| 292 |
+
"keyframe": "/workspace/q_kf/ref_002941.png",
|
| 293 |
+
"kf_pos": 25,
|
| 294 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 295 |
+
"out": "/workspace/ltx_co_out/w36.mp4",
|
| 296 |
+
"cut_at_start": false
|
| 297 |
+
},
|
| 298 |
+
{
|
| 299 |
+
"gray": "/workspace/ltx_windows/w37.mp4",
|
| 300 |
+
"keyframe": "/workspace/q_kf/ref_003000.png",
|
| 301 |
+
"kf_pos": 3,
|
| 302 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 303 |
+
"out": "/workspace/ltx_co_out/w37.mp4",
|
| 304 |
+
"cut_at_start": true
|
| 305 |
+
},
|
| 306 |
+
{
|
| 307 |
+
"gray": "/workspace/ltx_windows/w38.mp4",
|
| 308 |
+
"keyframe": "/workspace/q_kf/ref_003150.png",
|
| 309 |
+
"kf_pos": 72,
|
| 310 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 311 |
+
"out": "/workspace/ltx_co_out/w38.mp4",
|
| 312 |
+
"cut_at_start": false
|
| 313 |
+
},
|
| 314 |
+
{
|
| 315 |
+
"gray": "/workspace/ltx_windows/w39.mp4",
|
| 316 |
+
"keyframe": "/workspace/q_kf/ref_003185.png",
|
| 317 |
+
"kf_pos": 26,
|
| 318 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 319 |
+
"out": "/workspace/ltx_co_out/w39.mp4",
|
| 320 |
+
"cut_at_start": false
|
| 321 |
+
},
|
| 322 |
+
{
|
| 323 |
+
"gray": "/workspace/ltx_windows/w40.mp4",
|
| 324 |
+
"keyframe": "/workspace/q_kf/ref_003260.png",
|
| 325 |
+
"kf_pos": 20,
|
| 326 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 327 |
+
"out": "/workspace/ltx_co_out/w40.mp4",
|
| 328 |
+
"cut_at_start": false
|
| 329 |
+
},
|
| 330 |
+
{
|
| 331 |
+
"gray": "/workspace/ltx_windows/w41.mp4",
|
| 332 |
+
"keyframe": "/workspace/q_kf/ref_003335.png",
|
| 333 |
+
"kf_pos": 14,
|
| 334 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 335 |
+
"out": "/workspace/ltx_co_out/w41.mp4",
|
| 336 |
+
"cut_at_start": false
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"gray": "/workspace/ltx_windows/w42.mp4",
|
| 340 |
+
"keyframe": "/workspace/q_kf/ref_003448.png",
|
| 341 |
+
"kf_pos": 46,
|
| 342 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 343 |
+
"out": "/workspace/ltx_co_out/w42.mp4",
|
| 344 |
+
"cut_at_start": false
|
| 345 |
+
},
|
| 346 |
+
{
|
| 347 |
+
"gray": "/workspace/ltx_windows/w43.mp4",
|
| 348 |
+
"keyframe": "/workspace/q_kf/ref_003523.png",
|
| 349 |
+
"kf_pos": 40,
|
| 350 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 351 |
+
"out": "/workspace/ltx_co_out/w43.mp4",
|
| 352 |
+
"cut_at_start": false
|
| 353 |
+
},
|
| 354 |
+
{
|
| 355 |
+
"gray": "/workspace/ltx_windows/w44.mp4",
|
| 356 |
+
"keyframe": "/workspace/q_kf/ref_003616.png",
|
| 357 |
+
"kf_pos": 52,
|
| 358 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 359 |
+
"out": "/workspace/ltx_co_out/w44.mp4",
|
| 360 |
+
"cut_at_start": false
|
| 361 |
+
},
|
| 362 |
+
{
|
| 363 |
+
"gray": "/workspace/ltx_windows/w45.mp4",
|
| 364 |
+
"keyframe": "/workspace/q_kf/ref_003691.png",
|
| 365 |
+
"kf_pos": 46,
|
| 366 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 367 |
+
"out": "/workspace/ltx_co_out/w45.mp4",
|
| 368 |
+
"cut_at_start": false
|
| 369 |
+
},
|
| 370 |
+
{
|
| 371 |
+
"gray": "/workspace/ltx_windows/w46.mp4",
|
| 372 |
+
"keyframe": "/workspace/q_kf/ref_003795.png",
|
| 373 |
+
"kf_pos": 69,
|
| 374 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 375 |
+
"out": "/workspace/ltx_co_out/w46.mp4",
|
| 376 |
+
"cut_at_start": false
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"gray": "/workspace/ltx_windows/w47.mp4",
|
| 380 |
+
"keyframe": "/workspace/q_kf/ref_003870.png",
|
| 381 |
+
"kf_pos": 63,
|
| 382 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 383 |
+
"out": "/workspace/ltx_co_out/w47.mp4",
|
| 384 |
+
"cut_at_start": false
|
| 385 |
+
},
|
| 386 |
+
{
|
| 387 |
+
"gray": "/workspace/ltx_windows/w48.mp4",
|
| 388 |
+
"keyframe": "/workspace/q_kf/ref_003945.png",
|
| 389 |
+
"kf_pos": 57,
|
| 390 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 391 |
+
"out": "/workspace/ltx_co_out/w48.mp4",
|
| 392 |
+
"cut_at_start": false
|
| 393 |
+
},
|
| 394 |
+
{
|
| 395 |
+
"gray": "/workspace/ltx_windows/w49.mp4",
|
| 396 |
+
"keyframe": "/workspace/q_kf/ref_004020.png",
|
| 397 |
+
"kf_pos": 51,
|
| 398 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 399 |
+
"out": "/workspace/ltx_co_out/w49.mp4",
|
| 400 |
+
"cut_at_start": false
|
| 401 |
+
},
|
| 402 |
+
{
|
| 403 |
+
"gray": "/workspace/ltx_windows/w50.mp4",
|
| 404 |
+
"keyframe": "/workspace/q_kf/ref_004102.png",
|
| 405 |
+
"kf_pos": 52,
|
| 406 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 407 |
+
"out": "/workspace/ltx_co_out/w50.mp4",
|
| 408 |
+
"cut_at_start": false
|
| 409 |
+
},
|
| 410 |
+
{
|
| 411 |
+
"gray": "/workspace/ltx_windows/w51.mp4",
|
| 412 |
+
"keyframe": "/workspace/q_kf/ref_004141.png",
|
| 413 |
+
"kf_pos": 10,
|
| 414 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 415 |
+
"out": "/workspace/ltx_co_out/w51.mp4",
|
| 416 |
+
"cut_at_start": false
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"gray": "/workspace/ltx_windows/w52.mp4",
|
| 420 |
+
"keyframe": "/workspace/q_kf/ref_004216.png",
|
| 421 |
+
"kf_pos": 4,
|
| 422 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 423 |
+
"out": "/workspace/ltx_co_out/w52.mp4",
|
| 424 |
+
"cut_at_start": false
|
| 425 |
+
},
|
| 426 |
+
{
|
| 427 |
+
"gray": "/workspace/ltx_windows/w53.mp4",
|
| 428 |
+
"keyframe": "/workspace/q_kf/ref_004320.png",
|
| 429 |
+
"kf_pos": 27,
|
| 430 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 431 |
+
"out": "/workspace/ltx_co_out/w53.mp4",
|
| 432 |
+
"cut_at_start": false
|
| 433 |
+
},
|
| 434 |
+
{
|
| 435 |
+
"gray": "/workspace/ltx_windows/w54.mp4",
|
| 436 |
+
"keyframe": "/workspace/q_kf/ref_004395.png",
|
| 437 |
+
"kf_pos": 21,
|
| 438 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 439 |
+
"out": "/workspace/ltx_co_out/w54.mp4",
|
| 440 |
+
"cut_at_start": false
|
| 441 |
+
},
|
| 442 |
+
{
|
| 443 |
+
"gray": "/workspace/ltx_windows/w55.mp4",
|
| 444 |
+
"keyframe": "/workspace/q_kf/ref_004470.png",
|
| 445 |
+
"kf_pos": 15,
|
| 446 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 447 |
+
"out": "/workspace/ltx_co_out/w55.mp4",
|
| 448 |
+
"cut_at_start": false
|
| 449 |
+
},
|
| 450 |
+
{
|
| 451 |
+
"gray": "/workspace/ltx_windows/w56.mp4",
|
| 452 |
+
"keyframe": "/workspace/q_kf/ref_004545.png",
|
| 453 |
+
"kf_pos": 9,
|
| 454 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 455 |
+
"out": "/workspace/ltx_co_out/w56.mp4",
|
| 456 |
+
"cut_at_start": false
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"gray": "/workspace/ltx_windows/w57.mp4",
|
| 460 |
+
"keyframe": "/workspace/q_kf/ref_004620.png",
|
| 461 |
+
"kf_pos": 3,
|
| 462 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 463 |
+
"out": "/workspace/ltx_co_out/w57.mp4",
|
| 464 |
+
"cut_at_start": false
|
| 465 |
+
},
|
| 466 |
+
{
|
| 467 |
+
"gray": "/workspace/ltx_windows/w58.mp4",
|
| 468 |
+
"keyframe": "/workspace/q_kf/ref_004770.png",
|
| 469 |
+
"kf_pos": 72,
|
| 470 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 471 |
+
"out": "/workspace/ltx_co_out/w58.mp4",
|
| 472 |
+
"cut_at_start": false
|
| 473 |
+
},
|
| 474 |
+
{
|
| 475 |
+
"gray": "/workspace/ltx_windows/w59.mp4",
|
| 476 |
+
"keyframe": "/workspace/q_kf/ref_004845.png",
|
| 477 |
+
"kf_pos": 66,
|
| 478 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 479 |
+
"out": "/workspace/ltx_co_out/w59.mp4",
|
| 480 |
+
"cut_at_start": false
|
| 481 |
+
},
|
| 482 |
+
{
|
| 483 |
+
"gray": "/workspace/ltx_windows/w60.mp4",
|
| 484 |
+
"keyframe": "/workspace/q_kf/ref_004920.png",
|
| 485 |
+
"kf_pos": 60,
|
| 486 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 487 |
+
"out": "/workspace/ltx_co_out/w60.mp4",
|
| 488 |
+
"cut_at_start": false
|
| 489 |
+
},
|
| 490 |
+
{
|
| 491 |
+
"gray": "/workspace/ltx_windows/w61.mp4",
|
| 492 |
+
"keyframe": "/workspace/q_kf/ref_004995.png",
|
| 493 |
+
"kf_pos": 54,
|
| 494 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 495 |
+
"out": "/workspace/ltx_co_out/w61.mp4",
|
| 496 |
+
"cut_at_start": false
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"gray": "/workspace/ltx_windows/w62.mp4",
|
| 500 |
+
"keyframe": "/workspace/q_kf/ref_005070.png",
|
| 501 |
+
"kf_pos": 48,
|
| 502 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 503 |
+
"out": "/workspace/ltx_co_out/w62.mp4",
|
| 504 |
+
"cut_at_start": false
|
| 505 |
+
},
|
| 506 |
+
{
|
| 507 |
+
"gray": "/workspace/ltx_windows/w63.mp4",
|
| 508 |
+
"keyframe": "/workspace/q_kf/ref_005145.png",
|
| 509 |
+
"kf_pos": 42,
|
| 510 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 511 |
+
"out": "/workspace/ltx_co_out/w63.mp4",
|
| 512 |
+
"cut_at_start": false
|
| 513 |
+
},
|
| 514 |
+
{
|
| 515 |
+
"gray": "/workspace/ltx_windows/w64.mp4",
|
| 516 |
+
"keyframe": "/workspace/q_kf/ref_005220.png",
|
| 517 |
+
"kf_pos": 36,
|
| 518 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 519 |
+
"out": "/workspace/ltx_co_out/w64.mp4",
|
| 520 |
+
"cut_at_start": false
|
| 521 |
+
},
|
| 522 |
+
{
|
| 523 |
+
"gray": "/workspace/ltx_windows/w65.mp4",
|
| 524 |
+
"keyframe": "/workspace/q_kf/ref_005295.png",
|
| 525 |
+
"kf_pos": 30,
|
| 526 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 527 |
+
"out": "/workspace/ltx_co_out/w65.mp4",
|
| 528 |
+
"cut_at_start": false
|
| 529 |
+
},
|
| 530 |
+
{
|
| 531 |
+
"gray": "/workspace/ltx_windows/w66.mp4",
|
| 532 |
+
"keyframe": "/workspace/q_kf/ref_005370.png",
|
| 533 |
+
"kf_pos": 24,
|
| 534 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 535 |
+
"out": "/workspace/ltx_co_out/w66.mp4",
|
| 536 |
+
"cut_at_start": false
|
| 537 |
+
}
|
| 538 |
+
]
|
ltx_co_manifest_recolored.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
[{"gray": "/workspace/ltx_windows/w0.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000000.png", "kf_pos": 0, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w0.mp4", "cut_at_start": true}, {"gray": "/workspace/ltx_windows/w1.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000150.png", "kf_pos": 69, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w1.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w2.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000225.png", "kf_pos": 63, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w2.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w3.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000300.png", "kf_pos": 57, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w3.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w4.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000375.png", "kf_pos": 51, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w4.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w5.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000450.png", "kf_pos": 45, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w5.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w6.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000525.png", "kf_pos": 39, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w6.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w7.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000600.png", "kf_pos": 33, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w7.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w8.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000698.png", "kf_pos": 50, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w8.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w9.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000743.png", "kf_pos": 14, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w9.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w10.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000818.png", "kf_pos": 8, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w10.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w11.mp4", "keyframe": "/workspace/q_kf_recolored/ref_000893.png", "kf_pos": 2, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w11.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w12.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001043.png", "kf_pos": 71, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w12.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w13.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001118.png", "kf_pos": 65, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w13.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w14.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001193.png", "kf_pos": 59, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w14.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w15.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001268.png", "kf_pos": 53, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w15.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w16.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001343.png", "kf_pos": 47, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w16.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w17.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001418.png", "kf_pos": 41, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w17.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w18.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001493.png", "kf_pos": 35, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w18.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w19.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001568.png", "kf_pos": 29, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w19.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w20.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001643.png", "kf_pos": 23, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w20.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w21.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001734.png", "kf_pos": 33, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w21.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w22.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001809.png", "kf_pos": 27, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w22.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w23.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001870.png", "kf_pos": 7, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w23.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w24.mp4", "keyframe": "/workspace/q_kf_recolored/ref_001945.png", "kf_pos": 1, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w24.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w25.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002095.png", "kf_pos": 70, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w25.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w26.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002170.png", "kf_pos": 64, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w26.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w27.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002245.png", "kf_pos": 58, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w27.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w28.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002320.png", "kf_pos": 52, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w28.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w29.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002395.png", "kf_pos": 46, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w29.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w30.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002470.png", "kf_pos": 40, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w30.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w31.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002545.png", "kf_pos": 34, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w31.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w32.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002620.png", "kf_pos": 28, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w32.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w33.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002716.png", "kf_pos": 43, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w33.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w34.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002791.png", "kf_pos": 37, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w34.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w35.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002866.png", "kf_pos": 31, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w35.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w36.mp4", "keyframe": "/workspace/q_kf_recolored/ref_002941.png", "kf_pos": 25, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w36.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w37.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003000.png", "kf_pos": 3, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w37.mp4", "cut_at_start": true}, {"gray": "/workspace/ltx_windows/w38.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003150.png", "kf_pos": 72, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w38.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w39.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003185.png", "kf_pos": 26, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w39.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w40.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003260.png", "kf_pos": 20, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w40.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w41.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003335.png", "kf_pos": 14, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w41.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w42.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003448.png", "kf_pos": 46, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w42.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w43.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003523.png", "kf_pos": 40, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w43.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w44.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003616.png", "kf_pos": 52, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w44.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w45.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003691.png", "kf_pos": 46, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w45.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w46.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003795.png", "kf_pos": 69, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w46.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w47.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003870.png", "kf_pos": 63, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w47.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w48.mp4", "keyframe": "/workspace/q_kf_recolored/ref_003945.png", "kf_pos": 57, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w48.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w49.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004020.png", "kf_pos": 51, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w49.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w50.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004102.png", "kf_pos": 52, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w50.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w51.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004141.png", "kf_pos": 10, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w51.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w52.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004216.png", "kf_pos": 4, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w52.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w53.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004320.png", "kf_pos": 27, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w53.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w54.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004395.png", "kf_pos": 21, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w54.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w55.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004470.png", "kf_pos": 15, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w55.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w56.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004545.png", "kf_pos": 9, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w56.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w57.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004620.png", "kf_pos": 3, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w57.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w58.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004770.png", "kf_pos": 72, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w58.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w59.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004845.png", "kf_pos": 66, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w59.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w60.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004920.png", "kf_pos": 60, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w60.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w61.mp4", "keyframe": "/workspace/q_kf_recolored/ref_004995.png", "kf_pos": 54, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w61.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w62.mp4", "keyframe": "/workspace/q_kf_recolored/ref_005070.png", "kf_pos": 48, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w62.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w63.mp4", "keyframe": "/workspace/q_kf_recolored/ref_005145.png", "kf_pos": 42, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w63.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w64.mp4", "keyframe": "/workspace/q_kf_recolored/ref_005220.png", "kf_pos": 36, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w64.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w65.mp4", "keyframe": "/workspace/q_kf_recolored/ref_005295.png", "kf_pos": 30, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w65.mp4", "cut_at_start": false}, {"gray": "/workspace/ltx_windows/w66.mp4", "keyframe": "/workspace/q_kf_recolored/ref_005370.png", "kf_pos": 24, "prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.", "out": "/workspace/ltx_co_out/w66.mp4", "cut_at_start": false}]
|
ltx_co_manifest_v2.json
ADDED
|
@@ -0,0 +1,654 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"gray": "/workspace/ltx_windows/w0.mp4",
|
| 4 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000000.png",
|
| 5 |
+
"kf_pos": 0,
|
| 6 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 7 |
+
"out": "/workspace/ltx_co_out/w0.mp4",
|
| 8 |
+
"cut_at_start": true,
|
| 9 |
+
"scene_id": 0
|
| 10 |
+
},
|
| 11 |
+
{
|
| 12 |
+
"gray": "/workspace/ltx_windows/w1.mp4",
|
| 13 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000150.png",
|
| 14 |
+
"kf_pos": 69,
|
| 15 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 16 |
+
"out": "/workspace/ltx_co_out/w1.mp4",
|
| 17 |
+
"cut_at_start": false,
|
| 18 |
+
"scene_id": 0
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"gray": "/workspace/ltx_windows/w2.mp4",
|
| 22 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000225.png",
|
| 23 |
+
"kf_pos": 63,
|
| 24 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 25 |
+
"out": "/workspace/ltx_co_out/w2.mp4",
|
| 26 |
+
"cut_at_start": false,
|
| 27 |
+
"scene_id": 0
|
| 28 |
+
},
|
| 29 |
+
{
|
| 30 |
+
"gray": "/workspace/ltx_windows/w3.mp4",
|
| 31 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000300.png",
|
| 32 |
+
"kf_pos": 57,
|
| 33 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 34 |
+
"out": "/workspace/ltx_co_out/w3.mp4",
|
| 35 |
+
"cut_at_start": false,
|
| 36 |
+
"scene_id": 0
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"gray": "/workspace/ltx_windows/w4.mp4",
|
| 40 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000375.png",
|
| 41 |
+
"kf_pos": 51,
|
| 42 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 43 |
+
"out": "/workspace/ltx_co_out/w4.mp4",
|
| 44 |
+
"cut_at_start": false,
|
| 45 |
+
"scene_id": 0
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"gray": "/workspace/ltx_windows/w5.mp4",
|
| 49 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000450.png",
|
| 50 |
+
"kf_pos": 45,
|
| 51 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 52 |
+
"out": "/workspace/ltx_co_out/w5.mp4",
|
| 53 |
+
"cut_at_start": false,
|
| 54 |
+
"scene_id": 0
|
| 55 |
+
},
|
| 56 |
+
{
|
| 57 |
+
"gray": "/workspace/ltx_windows/w6.mp4",
|
| 58 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000525.png",
|
| 59 |
+
"kf_pos": 39,
|
| 60 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 61 |
+
"out": "/workspace/ltx_co_out/w6.mp4",
|
| 62 |
+
"cut_at_start": false,
|
| 63 |
+
"scene_id": 0
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"gray": "/workspace/ltx_windows/w7.mp4",
|
| 67 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000600.png",
|
| 68 |
+
"kf_pos": 33,
|
| 69 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 70 |
+
"out": "/workspace/ltx_co_out/w7.mp4",
|
| 71 |
+
"cut_at_start": false,
|
| 72 |
+
"extra_anchors": [
|
| 73 |
+
{
|
| 74 |
+
"path": "/workspace/q_kf_recolored/ref_000623.png",
|
| 75 |
+
"pos": 58,
|
| 76 |
+
"weight": 0.95
|
| 77 |
+
}
|
| 78 |
+
],
|
| 79 |
+
"scene_id": 0
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"gray": "/workspace/ltx_windows/w8.mp4",
|
| 83 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000698.png",
|
| 84 |
+
"kf_pos": 50,
|
| 85 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 86 |
+
"out": "/workspace/ltx_co_out/w8.mp4",
|
| 87 |
+
"cut_at_start": false,
|
| 88 |
+
"scene_id": 0
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"gray": "/workspace/ltx_windows/w9.mp4",
|
| 92 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000743.png",
|
| 93 |
+
"kf_pos": 14,
|
| 94 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 95 |
+
"out": "/workspace/ltx_co_out/w9.mp4",
|
| 96 |
+
"cut_at_start": true,
|
| 97 |
+
"scene_id": 1
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"gray": "/workspace/ltx_windows/w10.mp4",
|
| 101 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000818.png",
|
| 102 |
+
"kf_pos": 8,
|
| 103 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 104 |
+
"out": "/workspace/ltx_co_out/w10.mp4",
|
| 105 |
+
"cut_at_start": false,
|
| 106 |
+
"scene_id": 1
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"gray": "/workspace/ltx_windows/w11.mp4",
|
| 110 |
+
"keyframe": "/workspace/q_kf_recolored/ref_000893.png",
|
| 111 |
+
"kf_pos": 2,
|
| 112 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 113 |
+
"out": "/workspace/ltx_co_out/w11.mp4",
|
| 114 |
+
"cut_at_start": false,
|
| 115 |
+
"scene_id": 1
|
| 116 |
+
},
|
| 117 |
+
{
|
| 118 |
+
"gray": "/workspace/ltx_windows/w12.mp4",
|
| 119 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001043.png",
|
| 120 |
+
"kf_pos": 71,
|
| 121 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 122 |
+
"out": "/workspace/ltx_co_out/w12.mp4",
|
| 123 |
+
"cut_at_start": false,
|
| 124 |
+
"scene_id": 1
|
| 125 |
+
},
|
| 126 |
+
{
|
| 127 |
+
"gray": "/workspace/ltx_windows/w13.mp4",
|
| 128 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001118.png",
|
| 129 |
+
"kf_pos": 65,
|
| 130 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 131 |
+
"out": "/workspace/ltx_co_out/w13.mp4",
|
| 132 |
+
"cut_at_start": false,
|
| 133 |
+
"scene_id": 1
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"gray": "/workspace/ltx_windows/w14.mp4",
|
| 137 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001193.png",
|
| 138 |
+
"kf_pos": 59,
|
| 139 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 140 |
+
"out": "/workspace/ltx_co_out/w14.mp4",
|
| 141 |
+
"cut_at_start": false,
|
| 142 |
+
"scene_id": 1
|
| 143 |
+
},
|
| 144 |
+
{
|
| 145 |
+
"gray": "/workspace/ltx_windows/w15.mp4",
|
| 146 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001268.png",
|
| 147 |
+
"kf_pos": 53,
|
| 148 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 149 |
+
"out": "/workspace/ltx_co_out/w15.mp4",
|
| 150 |
+
"cut_at_start": false,
|
| 151 |
+
"scene_id": 1
|
| 152 |
+
},
|
| 153 |
+
{
|
| 154 |
+
"gray": "/workspace/ltx_windows/w16.mp4",
|
| 155 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001343.png",
|
| 156 |
+
"kf_pos": 47,
|
| 157 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 158 |
+
"out": "/workspace/ltx_co_out/w16.mp4",
|
| 159 |
+
"cut_at_start": false,
|
| 160 |
+
"scene_id": 1
|
| 161 |
+
},
|
| 162 |
+
{
|
| 163 |
+
"gray": "/workspace/ltx_windows/w17.mp4",
|
| 164 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001418.png",
|
| 165 |
+
"kf_pos": 41,
|
| 166 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 167 |
+
"out": "/workspace/ltx_co_out/w17.mp4",
|
| 168 |
+
"cut_at_start": false,
|
| 169 |
+
"scene_id": 1
|
| 170 |
+
},
|
| 171 |
+
{
|
| 172 |
+
"gray": "/workspace/ltx_windows/w18.mp4",
|
| 173 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001493.png",
|
| 174 |
+
"kf_pos": 35,
|
| 175 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 176 |
+
"out": "/workspace/ltx_co_out/w18.mp4",
|
| 177 |
+
"cut_at_start": false,
|
| 178 |
+
"scene_id": 1
|
| 179 |
+
},
|
| 180 |
+
{
|
| 181 |
+
"gray": "/workspace/ltx_windows/w19.mp4",
|
| 182 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001568.png",
|
| 183 |
+
"kf_pos": 29,
|
| 184 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 185 |
+
"out": "/workspace/ltx_co_out/w19.mp4",
|
| 186 |
+
"cut_at_start": false,
|
| 187 |
+
"scene_id": 1
|
| 188 |
+
},
|
| 189 |
+
{
|
| 190 |
+
"gray": "/workspace/ltx_windows/w20.mp4",
|
| 191 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001643.png",
|
| 192 |
+
"kf_pos": 23,
|
| 193 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 194 |
+
"out": "/workspace/ltx_co_out/w20.mp4",
|
| 195 |
+
"cut_at_start": false,
|
| 196 |
+
"extra_anchors": [
|
| 197 |
+
{
|
| 198 |
+
"path": "/workspace/q_kf_recolored/ref_001659.png",
|
| 199 |
+
"pos": 41,
|
| 200 |
+
"weight": 0.95
|
| 201 |
+
}
|
| 202 |
+
],
|
| 203 |
+
"scene_id": 1
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"gray": "/workspace/ltx_windows/w21.mp4",
|
| 207 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001734.png",
|
| 208 |
+
"kf_pos": 33,
|
| 209 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 210 |
+
"out": "/workspace/ltx_co_out/w21.mp4",
|
| 211 |
+
"cut_at_start": false,
|
| 212 |
+
"scene_id": 1
|
| 213 |
+
},
|
| 214 |
+
{
|
| 215 |
+
"gray": "/workspace/ltx_windows/w22.mp4",
|
| 216 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001809.png",
|
| 217 |
+
"kf_pos": 27,
|
| 218 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 219 |
+
"out": "/workspace/ltx_co_out/w22.mp4",
|
| 220 |
+
"cut_at_start": false,
|
| 221 |
+
"scene_id": 1
|
| 222 |
+
},
|
| 223 |
+
{
|
| 224 |
+
"gray": "/workspace/ltx_windows/w23.mp4",
|
| 225 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001870.png",
|
| 226 |
+
"kf_pos": 7,
|
| 227 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 228 |
+
"out": "/workspace/ltx_co_out/w23.mp4",
|
| 229 |
+
"cut_at_start": true,
|
| 230 |
+
"scene_id": 2
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"gray": "/workspace/ltx_windows/w24.mp4",
|
| 234 |
+
"keyframe": "/workspace/q_kf_recolored/ref_001945.png",
|
| 235 |
+
"kf_pos": 1,
|
| 236 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 237 |
+
"out": "/workspace/ltx_co_out/w24.mp4",
|
| 238 |
+
"cut_at_start": false,
|
| 239 |
+
"scene_id": 2
|
| 240 |
+
},
|
| 241 |
+
{
|
| 242 |
+
"gray": "/workspace/ltx_windows/w25.mp4",
|
| 243 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002095.png",
|
| 244 |
+
"kf_pos": 70,
|
| 245 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 246 |
+
"out": "/workspace/ltx_co_out/w25.mp4",
|
| 247 |
+
"cut_at_start": false,
|
| 248 |
+
"scene_id": 2
|
| 249 |
+
},
|
| 250 |
+
{
|
| 251 |
+
"gray": "/workspace/ltx_windows/w26.mp4",
|
| 252 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002170.png",
|
| 253 |
+
"kf_pos": 64,
|
| 254 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 255 |
+
"out": "/workspace/ltx_co_out/w26.mp4",
|
| 256 |
+
"cut_at_start": false,
|
| 257 |
+
"scene_id": 2
|
| 258 |
+
},
|
| 259 |
+
{
|
| 260 |
+
"gray": "/workspace/ltx_windows/w27.mp4",
|
| 261 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002245.png",
|
| 262 |
+
"kf_pos": 58,
|
| 263 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 264 |
+
"out": "/workspace/ltx_co_out/w27.mp4",
|
| 265 |
+
"cut_at_start": false,
|
| 266 |
+
"scene_id": 2
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"gray": "/workspace/ltx_windows/w28.mp4",
|
| 270 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002320.png",
|
| 271 |
+
"kf_pos": 52,
|
| 272 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 273 |
+
"out": "/workspace/ltx_co_out/w28.mp4",
|
| 274 |
+
"cut_at_start": false,
|
| 275 |
+
"scene_id": 2
|
| 276 |
+
},
|
| 277 |
+
{
|
| 278 |
+
"gray": "/workspace/ltx_windows/w29.mp4",
|
| 279 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002395.png",
|
| 280 |
+
"kf_pos": 46,
|
| 281 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 282 |
+
"out": "/workspace/ltx_co_out/w29.mp4",
|
| 283 |
+
"cut_at_start": false,
|
| 284 |
+
"scene_id": 2
|
| 285 |
+
},
|
| 286 |
+
{
|
| 287 |
+
"gray": "/workspace/ltx_windows/w30.mp4",
|
| 288 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002470.png",
|
| 289 |
+
"kf_pos": 40,
|
| 290 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 291 |
+
"out": "/workspace/ltx_co_out/w30.mp4",
|
| 292 |
+
"cut_at_start": false,
|
| 293 |
+
"scene_id": 2
|
| 294 |
+
},
|
| 295 |
+
{
|
| 296 |
+
"gray": "/workspace/ltx_windows/w31.mp4",
|
| 297 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002545.png",
|
| 298 |
+
"kf_pos": 34,
|
| 299 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 300 |
+
"out": "/workspace/ltx_co_out/w31.mp4",
|
| 301 |
+
"cut_at_start": false,
|
| 302 |
+
"scene_id": 2
|
| 303 |
+
},
|
| 304 |
+
{
|
| 305 |
+
"gray": "/workspace/ltx_windows/w32.mp4",
|
| 306 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002620.png",
|
| 307 |
+
"kf_pos": 28,
|
| 308 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 309 |
+
"out": "/workspace/ltx_co_out/w32.mp4",
|
| 310 |
+
"cut_at_start": false,
|
| 311 |
+
"extra_anchors": [
|
| 312 |
+
{
|
| 313 |
+
"path": "/workspace/q_kf_recolored/ref_002641.png",
|
| 314 |
+
"pos": 51,
|
| 315 |
+
"weight": 0.95
|
| 316 |
+
}
|
| 317 |
+
],
|
| 318 |
+
"scene_id": 2
|
| 319 |
+
},
|
| 320 |
+
{
|
| 321 |
+
"gray": "/workspace/ltx_windows/w33.mp4",
|
| 322 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002716.png",
|
| 323 |
+
"kf_pos": 43,
|
| 324 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 325 |
+
"out": "/workspace/ltx_co_out/w33.mp4",
|
| 326 |
+
"cut_at_start": false,
|
| 327 |
+
"scene_id": 2
|
| 328 |
+
},
|
| 329 |
+
{
|
| 330 |
+
"gray": "/workspace/ltx_windows/w34.mp4",
|
| 331 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002791.png",
|
| 332 |
+
"kf_pos": 37,
|
| 333 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 334 |
+
"out": "/workspace/ltx_co_out/w34.mp4",
|
| 335 |
+
"cut_at_start": false,
|
| 336 |
+
"scene_id": 2
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"gray": "/workspace/ltx_windows/w35.mp4",
|
| 340 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002866.png",
|
| 341 |
+
"kf_pos": 31,
|
| 342 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 343 |
+
"out": "/workspace/ltx_co_out/w35.mp4",
|
| 344 |
+
"cut_at_start": false,
|
| 345 |
+
"scene_id": 2
|
| 346 |
+
},
|
| 347 |
+
{
|
| 348 |
+
"gray": "/workspace/ltx_windows/w36.mp4",
|
| 349 |
+
"keyframe": "/workspace/q_kf_recolored/ref_002941.png",
|
| 350 |
+
"kf_pos": 25,
|
| 351 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 352 |
+
"out": "/workspace/ltx_co_out/w36.mp4",
|
| 353 |
+
"cut_at_start": false,
|
| 354 |
+
"scene_id": 2
|
| 355 |
+
},
|
| 356 |
+
{
|
| 357 |
+
"gray": "/workspace/ltx_windows/w37.mp4",
|
| 358 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003000.png",
|
| 359 |
+
"kf_pos": 3,
|
| 360 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 361 |
+
"out": "/workspace/ltx_co_out/w37.mp4",
|
| 362 |
+
"cut_at_start": true,
|
| 363 |
+
"scene_id": 3
|
| 364 |
+
},
|
| 365 |
+
{
|
| 366 |
+
"gray": "/workspace/ltx_windows/w38.mp4",
|
| 367 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003150.png",
|
| 368 |
+
"kf_pos": 72,
|
| 369 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 370 |
+
"out": "/workspace/ltx_co_out/w38.mp4",
|
| 371 |
+
"cut_at_start": false,
|
| 372 |
+
"scene_id": 3
|
| 373 |
+
},
|
| 374 |
+
{
|
| 375 |
+
"gray": "/workspace/ltx_windows/w39.mp4",
|
| 376 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003185.png",
|
| 377 |
+
"kf_pos": 26,
|
| 378 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 379 |
+
"out": "/workspace/ltx_co_out/w39.mp4",
|
| 380 |
+
"cut_at_start": false,
|
| 381 |
+
"scene_id": 3
|
| 382 |
+
},
|
| 383 |
+
{
|
| 384 |
+
"gray": "/workspace/ltx_windows/w40.mp4",
|
| 385 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003260.png",
|
| 386 |
+
"kf_pos": 20,
|
| 387 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 388 |
+
"out": "/workspace/ltx_co_out/w40.mp4",
|
| 389 |
+
"cut_at_start": false,
|
| 390 |
+
"scene_id": 3
|
| 391 |
+
},
|
| 392 |
+
{
|
| 393 |
+
"gray": "/workspace/ltx_windows/w41.mp4",
|
| 394 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003335.png",
|
| 395 |
+
"kf_pos": 14,
|
| 396 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 397 |
+
"out": "/workspace/ltx_co_out/w41.mp4",
|
| 398 |
+
"cut_at_start": false,
|
| 399 |
+
"extra_anchors": [
|
| 400 |
+
{
|
| 401 |
+
"path": "/workspace/q_kf_recolored/ref_003373.png",
|
| 402 |
+
"pos": 54,
|
| 403 |
+
"weight": 0.95
|
| 404 |
+
}
|
| 405 |
+
],
|
| 406 |
+
"scene_id": 3
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"gray": "/workspace/ltx_windows/w42.mp4",
|
| 410 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003448.png",
|
| 411 |
+
"kf_pos": 46,
|
| 412 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 413 |
+
"out": "/workspace/ltx_co_out/w42.mp4",
|
| 414 |
+
"cut_at_start": false,
|
| 415 |
+
"scene_id": 3
|
| 416 |
+
},
|
| 417 |
+
{
|
| 418 |
+
"gray": "/workspace/ltx_windows/w43.mp4",
|
| 419 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003523.png",
|
| 420 |
+
"kf_pos": 40,
|
| 421 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 422 |
+
"out": "/workspace/ltx_co_out/w43.mp4",
|
| 423 |
+
"cut_at_start": false,
|
| 424 |
+
"extra_anchors": [
|
| 425 |
+
{
|
| 426 |
+
"path": "/workspace/q_kf_recolored/ref_003541.png",
|
| 427 |
+
"pos": 60,
|
| 428 |
+
"weight": 0.95
|
| 429 |
+
}
|
| 430 |
+
],
|
| 431 |
+
"scene_id": 3
|
| 432 |
+
},
|
| 433 |
+
{
|
| 434 |
+
"gray": "/workspace/ltx_windows/w44.mp4",
|
| 435 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003616.png",
|
| 436 |
+
"kf_pos": 52,
|
| 437 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 438 |
+
"out": "/workspace/ltx_co_out/w44.mp4",
|
| 439 |
+
"cut_at_start": false,
|
| 440 |
+
"scene_id": 3
|
| 441 |
+
},
|
| 442 |
+
{
|
| 443 |
+
"gray": "/workspace/ltx_windows/w45.mp4",
|
| 444 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003691.png",
|
| 445 |
+
"kf_pos": 46,
|
| 446 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 447 |
+
"out": "/workspace/ltx_co_out/w45.mp4",
|
| 448 |
+
"cut_at_start": false,
|
| 449 |
+
"scene_id": 3
|
| 450 |
+
},
|
| 451 |
+
{
|
| 452 |
+
"gray": "/workspace/ltx_windows/w46.mp4",
|
| 453 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003795.png",
|
| 454 |
+
"kf_pos": 69,
|
| 455 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 456 |
+
"out": "/workspace/ltx_co_out/w46.mp4",
|
| 457 |
+
"cut_at_start": false,
|
| 458 |
+
"scene_id": 3
|
| 459 |
+
},
|
| 460 |
+
{
|
| 461 |
+
"gray": "/workspace/ltx_windows/w47.mp4",
|
| 462 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003870.png",
|
| 463 |
+
"kf_pos": 63,
|
| 464 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 465 |
+
"out": "/workspace/ltx_co_out/w47.mp4",
|
| 466 |
+
"cut_at_start": false,
|
| 467 |
+
"scene_id": 3
|
| 468 |
+
},
|
| 469 |
+
{
|
| 470 |
+
"gray": "/workspace/ltx_windows/w48.mp4",
|
| 471 |
+
"keyframe": "/workspace/q_kf_recolored/ref_003945.png",
|
| 472 |
+
"kf_pos": 57,
|
| 473 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 474 |
+
"out": "/workspace/ltx_co_out/w48.mp4",
|
| 475 |
+
"cut_at_start": false,
|
| 476 |
+
"scene_id": 3
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"gray": "/workspace/ltx_windows/w49.mp4",
|
| 480 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004020.png",
|
| 481 |
+
"kf_pos": 51,
|
| 482 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 483 |
+
"out": "/workspace/ltx_co_out/w49.mp4",
|
| 484 |
+
"cut_at_start": false,
|
| 485 |
+
"extra_anchors": [
|
| 486 |
+
{
|
| 487 |
+
"path": "/workspace/q_kf_recolored/ref_004027.png",
|
| 488 |
+
"pos": 60,
|
| 489 |
+
"weight": 0.95
|
| 490 |
+
}
|
| 491 |
+
],
|
| 492 |
+
"scene_id": 3
|
| 493 |
+
},
|
| 494 |
+
{
|
| 495 |
+
"gray": "/workspace/ltx_windows/w50.mp4",
|
| 496 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004102.png",
|
| 497 |
+
"kf_pos": 32,
|
| 498 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 499 |
+
"out": "/workspace/ltx_co_out/w50.mp4",
|
| 500 |
+
"cut_at_start": false,
|
| 501 |
+
"scene_id": 3
|
| 502 |
+
},
|
| 503 |
+
{
|
| 504 |
+
"gray": "/workspace/ltx_windows/w51.mp4",
|
| 505 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004141.png",
|
| 506 |
+
"kf_pos": 10,
|
| 507 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 508 |
+
"out": "/workspace/ltx_co_out/w51.mp4",
|
| 509 |
+
"cut_at_start": true,
|
| 510 |
+
"scene_id": 4
|
| 511 |
+
},
|
| 512 |
+
{
|
| 513 |
+
"gray": "/workspace/ltx_windows/w52.mp4",
|
| 514 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004216.png",
|
| 515 |
+
"kf_pos": 4,
|
| 516 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 517 |
+
"out": "/workspace/ltx_co_out/w52.mp4",
|
| 518 |
+
"cut_at_start": false,
|
| 519 |
+
"scene_id": 4
|
| 520 |
+
},
|
| 521 |
+
{
|
| 522 |
+
"gray": "/workspace/ltx_windows/w53.mp4",
|
| 523 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004320.png",
|
| 524 |
+
"kf_pos": 27,
|
| 525 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 526 |
+
"out": "/workspace/ltx_co_out/w53.mp4",
|
| 527 |
+
"cut_at_start": false,
|
| 528 |
+
"scene_id": 4
|
| 529 |
+
},
|
| 530 |
+
{
|
| 531 |
+
"gray": "/workspace/ltx_windows/w54.mp4",
|
| 532 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004395.png",
|
| 533 |
+
"kf_pos": 21,
|
| 534 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 535 |
+
"out": "/workspace/ltx_co_out/w54.mp4",
|
| 536 |
+
"cut_at_start": false,
|
| 537 |
+
"scene_id": 4
|
| 538 |
+
},
|
| 539 |
+
{
|
| 540 |
+
"gray": "/workspace/ltx_windows/w55.mp4",
|
| 541 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004470.png",
|
| 542 |
+
"kf_pos": 15,
|
| 543 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 544 |
+
"out": "/workspace/ltx_co_out/w55.mp4",
|
| 545 |
+
"cut_at_start": false,
|
| 546 |
+
"scene_id": 4
|
| 547 |
+
},
|
| 548 |
+
{
|
| 549 |
+
"gray": "/workspace/ltx_windows/w56.mp4",
|
| 550 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004545.png",
|
| 551 |
+
"kf_pos": 9,
|
| 552 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 553 |
+
"out": "/workspace/ltx_co_out/w56.mp4",
|
| 554 |
+
"cut_at_start": false,
|
| 555 |
+
"scene_id": 4
|
| 556 |
+
},
|
| 557 |
+
{
|
| 558 |
+
"gray": "/workspace/ltx_windows/w57.mp4",
|
| 559 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004620.png",
|
| 560 |
+
"kf_pos": 3,
|
| 561 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 562 |
+
"out": "/workspace/ltx_co_out/w57.mp4",
|
| 563 |
+
"cut_at_start": false,
|
| 564 |
+
"scene_id": 4
|
| 565 |
+
},
|
| 566 |
+
{
|
| 567 |
+
"gray": "/workspace/ltx_windows/w58.mp4",
|
| 568 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004770.png",
|
| 569 |
+
"kf_pos": 72,
|
| 570 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 571 |
+
"out": "/workspace/ltx_co_out/w58.mp4",
|
| 572 |
+
"cut_at_start": false,
|
| 573 |
+
"scene_id": 4
|
| 574 |
+
},
|
| 575 |
+
{
|
| 576 |
+
"gray": "/workspace/ltx_windows/w59.mp4",
|
| 577 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004845.png",
|
| 578 |
+
"kf_pos": 66,
|
| 579 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 580 |
+
"out": "/workspace/ltx_co_out/w59.mp4",
|
| 581 |
+
"cut_at_start": false,
|
| 582 |
+
"scene_id": 4
|
| 583 |
+
},
|
| 584 |
+
{
|
| 585 |
+
"gray": "/workspace/ltx_windows/w60.mp4",
|
| 586 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004920.png",
|
| 587 |
+
"kf_pos": 60,
|
| 588 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 589 |
+
"out": "/workspace/ltx_co_out/w60.mp4",
|
| 590 |
+
"cut_at_start": false,
|
| 591 |
+
"scene_id": 4
|
| 592 |
+
},
|
| 593 |
+
{
|
| 594 |
+
"gray": "/workspace/ltx_windows/w61.mp4",
|
| 595 |
+
"keyframe": "/workspace/q_kf_recolored/ref_004995.png",
|
| 596 |
+
"kf_pos": 54,
|
| 597 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 598 |
+
"out": "/workspace/ltx_co_out/w61.mp4",
|
| 599 |
+
"cut_at_start": false,
|
| 600 |
+
"scene_id": 4
|
| 601 |
+
},
|
| 602 |
+
{
|
| 603 |
+
"gray": "/workspace/ltx_windows/w62.mp4",
|
| 604 |
+
"keyframe": "/workspace/q_kf_recolored/ref_005070.png",
|
| 605 |
+
"kf_pos": 48,
|
| 606 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 607 |
+
"out": "/workspace/ltx_co_out/w62.mp4",
|
| 608 |
+
"cut_at_start": false,
|
| 609 |
+
"scene_id": 4
|
| 610 |
+
},
|
| 611 |
+
{
|
| 612 |
+
"gray": "/workspace/ltx_windows/w63.mp4",
|
| 613 |
+
"keyframe": "/workspace/q_kf_recolored/ref_005145.png",
|
| 614 |
+
"kf_pos": 42,
|
| 615 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 616 |
+
"out": "/workspace/ltx_co_out/w63.mp4",
|
| 617 |
+
"cut_at_start": false,
|
| 618 |
+
"scene_id": 4
|
| 619 |
+
},
|
| 620 |
+
{
|
| 621 |
+
"gray": "/workspace/ltx_windows/w64.mp4",
|
| 622 |
+
"keyframe": "/workspace/q_kf_recolored/ref_005220.png",
|
| 623 |
+
"kf_pos": 36,
|
| 624 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 625 |
+
"out": "/workspace/ltx_co_out/w64.mp4",
|
| 626 |
+
"cut_at_start": false,
|
| 627 |
+
"scene_id": 4
|
| 628 |
+
},
|
| 629 |
+
{
|
| 630 |
+
"gray": "/workspace/ltx_windows/w65.mp4",
|
| 631 |
+
"keyframe": "/workspace/q_kf_recolored/ref_005295.png",
|
| 632 |
+
"kf_pos": 30,
|
| 633 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 634 |
+
"out": "/workspace/ltx_co_out/w65.mp4",
|
| 635 |
+
"cut_at_start": false,
|
| 636 |
+
"scene_id": 4
|
| 637 |
+
},
|
| 638 |
+
{
|
| 639 |
+
"gray": "/workspace/ltx_windows/w66.mp4",
|
| 640 |
+
"keyframe": "/workspace/q_kf_recolored/ref_005370.png",
|
| 641 |
+
"kf_pos": 24,
|
| 642 |
+
"prompt": "1940s period film scene, natural realistic period-accurate colour, feldgrau grey-green uniforms, warm natural skin, grey-taupe suit, muted believable period palette, out-of-focus foreground neutral grey; only the colour changes, do not add, remove, move or alter anything.",
|
| 643 |
+
"out": "/workspace/ltx_co_out/w66.mp4",
|
| 644 |
+
"cut_at_start": false,
|
| 645 |
+
"extra_anchors": [
|
| 646 |
+
{
|
| 647 |
+
"path": "/workspace/q_kf_recolored/ref_005387.png",
|
| 648 |
+
"pos": 43,
|
| 649 |
+
"weight": 0.95
|
| 650 |
+
}
|
| 651 |
+
],
|
| 652 |
+
"scene_id": 4
|
| 653 |
+
}
|
| 654 |
+
]
|
ltx_driver.py
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""ltx_driver.py — LTX-2.3-22b-distilled IC-LoRA colorization, LOAD-ONCE + temporeel naadloos.
|
| 3 |
+
STRUCTURELE FIX voor venster-naden (ml-engineer + ac64 consult, 28 jun 2026):
|
| 4 |
+
- Carry-over: laatste N frames van venster K -> conditioning op frame_idx 0..N-1 van venster K+1
|
| 5 |
+
(via ic_lora ImageConditioningInput op willekeurige frame_idx) -> venster start vanuit vorig eind -> naadloos.
|
| 6 |
+
- Optioneel globaal anker-keyframe in elk venster (palet globaal pinnen).
|
| 7 |
+
- Optioneel 8-frame cosine-crossfade bij stitch voor rest-gladheid.
|
| 8 |
+
- Model laadt 1x (i.p.v. 67x in ltx_full_loop.sh) -> ~55min i.p.v. ~102min.
|
| 9 |
+
|
| 10 |
+
COMPUTE OPTIMALISATIES (A100-SXM4-80GB, 28 jun 2026):
|
| 11 |
+
- flash-attn 2: DIFFUSERS_ATTN_BACKEND=flash -> LTX dispatch_attention_fn gebruikt flash-attn 2.
|
| 12 |
+
Op Ampere (sm80) is dit de snelste attentie-backend. SageAttention NIET gebruiken op A100
|
| 13 |
+
(SM90-FP8 variant is Hopper-only; FP16 variant geeft geen winst boven flash-attn 2).
|
| 14 |
+
- TF32: torch.backends.cuda.matmul.allow_tf32=True (default op PyTorch>=1.7 maar hier expliciet).
|
| 15 |
+
- CFG-skip: guidance_scale=1.0 (distilled model heeft guidance ingebakken). Als de pipeline
|
| 16 |
+
met guidance_scale>1 draait, doet het 2 DiT-forwards per stap = 2x de compute. Met 1.0: 1 forward.
|
| 17 |
+
DIAGNOSE EERST: .venv/bin/python -m ltx_pipelines.ic_lora --help | grep -i guid
|
| 18 |
+
- torch.compile: mode='reduce-overhead', dynamic=False (vaste shapes 81f/960x544). Alleen DiT,
|
| 19 |
+
niet VAE/Gemma. Eerste compile ~3-4 min, amortiseert over 67 vensters.
|
| 20 |
+
max-autotune NIET gebruiken op 80GB (OOM-risico met 46GB model).
|
| 21 |
+
|
| 22 |
+
LET OP: de ltx_pipelines.ic_lora API-class-naam kan per repo-versie verschillen.
|
| 23 |
+
Valideer op de instance: `python -c "import ltx_pipelines.ic_lora as m; print(dir(m))"`.
|
| 24 |
+
Native import faalt -> subprocess-fallback (correct, minder efficient; compile dan niet actief).
|
| 25 |
+
|
| 26 |
+
Manifest (JSON): [{"gray":"wK.mp4","keyframe":"ref_X.png","kf_pos":40,"prompt":"...","out":"wK.mp4","cut_at_start":false}, ...]
|
| 27 |
+
Run: DIFFUSERS_ATTN_BACKEND=flash python ltx_driver.py manifest.json \
|
| 28 |
+
--ck ... --lora ... --gemma ... --num-frames 81 --width 960 --height 544 --steps 8 \
|
| 29 |
+
--guidance-scale 1.0 --compile --carry-over 2 --crossfade 8 --stitch-out full_seamless.mp4 --fps 30
|
| 30 |
+
"""
|
| 31 |
+
# EERST: flash-attn backend instellen VOOR elke diffusers/ltx import
|
| 32 |
+
import os
|
| 33 |
+
_attn_backend = os.environ.get('DIFFUSERS_ATTN_BACKEND', 'flash')
|
| 34 |
+
os.environ['DIFFUSERS_ATTN_BACKEND'] = _attn_backend
|
| 35 |
+
|
| 36 |
+
import sys, json, time, argparse, tempfile, subprocess, shutil
|
| 37 |
+
from pathlib import Path
|
| 38 |
+
|
| 39 |
+
import torch
|
| 40 |
+
# TF32: op A100 versnelt matmul ~1.5x bij bf16. Standaard aan in PyTorch>=1.7 maar hier expliciet.
|
| 41 |
+
torch.backends.cuda.matmul.allow_tf32 = True
|
| 42 |
+
torch.backends.cudnn.allow_tf32 = True
|
| 43 |
+
|
| 44 |
+
def parse_args():
|
| 45 |
+
p = argparse.ArgumentParser()
|
| 46 |
+
p.add_argument('manifest'); p.add_argument('--ck', required=True); p.add_argument('--lora', required=True)
|
| 47 |
+
p.add_argument('--gemma', required=True); p.add_argument('--num-frames', type=int, default=81)
|
| 48 |
+
p.add_argument('--width', type=int, default=960); p.add_argument('--height', type=int, default=544)
|
| 49 |
+
p.add_argument('--steps', type=int, default=8); p.add_argument('--seed', type=int, default=42)
|
| 50 |
+
p.add_argument('--lora-scale', type=float, default=1.0); p.add_argument('--carry-over', type=int, default=2)
|
| 51 |
+
p.add_argument('--crossfade', type=int, default=8); p.add_argument('--carry-weight-base', type=float, default=0.85)
|
| 52 |
+
p.add_argument('--carry-weight-decay', type=float, default=0.20); p.add_argument('--global-anchor', default=None)
|
| 53 |
+
p.add_argument('--skip-stage2', action='store_true', default=True); p.add_argument('--prompt', default=None)
|
| 54 |
+
p.add_argument('--stitch-out', default=None); p.add_argument('--fps', type=int, default=30)
|
| 55 |
+
# A100 compute opts:
|
| 56 |
+
p.add_argument('--guidance-scale', type=float, default=1.0,
|
| 57 |
+
help='CFG guidance. 1.0=single DiT forward/stap (distilled). >1 = 2 forwards = 2x trager.')
|
| 58 |
+
p.add_argument('--compile', action='store_true', default=False,
|
| 59 |
+
help='torch.compile de DiT (reduce-overhead, dynamic=False). Eerste venster ~3-4 min trager.')
|
| 60 |
+
p.add_argument('--compile-mode', default='reduce-overhead',
|
| 61 |
+
help='torch.compile mode. reduce-overhead=veilig op 80GB. max-autotune=OOM-risico.')
|
| 62 |
+
return p.parse_args()
|
| 63 |
+
|
| 64 |
+
def _apply_compile(pipe, mode):
|
| 65 |
+
"""Compileer de DiT-transformer. Niet de VAE of text encoder (wisselende shapes / 1x gebruik)."""
|
| 66 |
+
# Zoek het DiT-object: common attributen in ltx_pipelines en diffusers
|
| 67 |
+
dit = None
|
| 68 |
+
for attr in ('transformer', 'dit', 'model', 'unet'):
|
| 69 |
+
if hasattr(pipe, attr):
|
| 70 |
+
candidate = getattr(pipe, attr)
|
| 71 |
+
if callable(getattr(candidate, 'forward', None)):
|
| 72 |
+
dit = candidate; break
|
| 73 |
+
if dit is None:
|
| 74 |
+
print("[DRIVER] compile: DiT niet gevonden in pipeline — compile overgeslagen", flush=True); return
|
| 75 |
+
print(f"[DRIVER] compile: torch.compile({attr}, mode='{mode}', dynamic=False) ...", flush=True)
|
| 76 |
+
t0 = time.time()
|
| 77 |
+
setattr(pipe, attr, torch.compile(dit, mode=mode, dynamic=False))
|
| 78 |
+
print(f"[DRIVER] compile klaar ({round(time.time()-t0)}s) — eerste venster triggert kernel-compilatie", flush=True)
|
| 79 |
+
|
| 80 |
+
def _check_cfg(pipe, a):
|
| 81 |
+
"""Diagnose: print de effectieve guidance_scale zodat CFG-skip verifieerbaar is."""
|
| 82 |
+
gs = getattr(pipe, '_guidance_scale', None) or getattr(pipe, 'guidance_scale', None) or a.guidance_scale
|
| 83 |
+
n_forwards = 2 if float(gs) > 1.0 else 1
|
| 84 |
+
print(f"[DRIVER] CFG: guidance_scale={gs} -> {n_forwards} DiT forward(s)/stap "
|
| 85 |
+
f"(bij 8 steps: {8*n_forwards} forwards/venster)", flush=True)
|
| 86 |
+
if n_forwards == 2:
|
| 87 |
+
print("[DRIVER] WAARSCHUWING: guidance_scale>1 gedetecteerd. Gebruik --guidance-scale 1.0 "
|
| 88 |
+
"of voeg '--guidance-scale 1.0' toe aan CLI voor 2x speedup.", flush=True)
|
| 89 |
+
|
| 90 |
+
def load_pipeline(a):
|
| 91 |
+
# Rapporteer welke attentie-backend actief is
|
| 92 |
+
print(f"[DRIVER] DIFFUSERS_ATTN_BACKEND={os.environ.get('DIFFUSERS_ATTN_BACKEND','native')}", flush=True)
|
| 93 |
+
try:
|
| 94 |
+
from ltx_pipelines.ic_lora.inference import ICLoRAInference
|
| 95 |
+
pipe = ICLoRAInference(distilled_checkpoint_path=a.ck, lora_path=a.lora, lora_scale=a.lora_scale,
|
| 96 |
+
gemma_root=a.gemma, skip_stage2=a.skip_stage2)
|
| 97 |
+
print("[DRIVER] native ICLoRAInference geladen", flush=True)
|
| 98 |
+
_check_cfg(pipe, a)
|
| 99 |
+
if a.compile:
|
| 100 |
+
_apply_compile(pipe, a.compile_mode)
|
| 101 |
+
return pipe, 'native'
|
| 102 |
+
except (ImportError, AttributeError) as e:
|
| 103 |
+
print(f"[DRIVER] native import faalt ({e}) -> subprocess-fallback "
|
| 104 |
+
f"(compile niet actief in subprocess-mode)", flush=True)
|
| 105 |
+
return None, 'subprocess'
|
| 106 |
+
|
| 107 |
+
def run_native(pipe, w, conds, a):
|
| 108 |
+
# guidance_scale=1.0 = single forward per stap (CFG-skip voor distilled model)
|
| 109 |
+
kwargs = dict(prompt=w.get('prompt', a.prompt or ''), video_conditioning_path=w['gray'],
|
| 110 |
+
video_conditioning_weight=1.0, image_conditioning=conds, num_frames=a.num_frames,
|
| 111 |
+
width=a.width, height=a.height, seed=a.seed, num_inference_steps=a.steps,
|
| 112 |
+
output_path=w['out'])
|
| 113 |
+
# Pas guidance_scale toe als de pipeline het accepteert
|
| 114 |
+
try:
|
| 115 |
+
pipe.run(guidance_scale=a.guidance_scale, **kwargs)
|
| 116 |
+
except TypeError:
|
| 117 |
+
# Oudere API zonder guidance_scale parameter
|
| 118 |
+
pipe.run(**kwargs)
|
| 119 |
+
|
| 120 |
+
def run_subprocess(w, conds, a):
|
| 121 |
+
cmd = [sys.executable, '-m', 'ltx_pipelines.ic_lora', '--distilled-checkpoint-path', a.ck,
|
| 122 |
+
'--lora', a.lora, str(a.lora_scale), '--gemma-root', a.gemma,
|
| 123 |
+
'--video-conditioning', w['gray'], '1.0', '--num-frames', str(a.num_frames),
|
| 124 |
+
'--width', str(a.width), '--height', str(a.height), '--seed', str(a.seed),
|
| 125 |
+
'--frame-rate', str(a.fps), '--output-path', w['out'], '--prompt', w.get('prompt', a.prompt or '')]
|
| 126 |
+
if a.skip_stage2: cmd.append('--skip-stage-2')
|
| 127 |
+
# CFG-skip: probe of de CLI --guidance-scale accepteert (eenmalig) en voeg toe
|
| 128 |
+
if a.guidance_scale <= 1.0:
|
| 129 |
+
cmd += ['--guidance-scale', str(a.guidance_scale)]
|
| 130 |
+
for (path, pos, wt) in conds: cmd += ['--image', path, str(pos), str(wt)]
|
| 131 |
+
# Geef flash-attn backend door aan subprocess via env
|
| 132 |
+
env = os.environ.copy()
|
| 133 |
+
env['DIFFUSERS_ATTN_BACKEND'] = os.environ.get('DIFFUSERS_ATTN_BACKEND', 'flash')
|
| 134 |
+
result = subprocess.run(cmd, env=env)
|
| 135 |
+
if result.returncode != 0:
|
| 136 |
+
# Als --guidance-scale niet herkend: opnieuw zonder die flag
|
| 137 |
+
cmd2 = [c for c in cmd if c not in ['--guidance-scale', str(a.guidance_scale)]]
|
| 138 |
+
subprocess.run(cmd2, env=env, check=True)
|
| 139 |
+
|
| 140 |
+
def last_frames(video, n, td):
|
| 141 |
+
pr = subprocess.run(['ffprobe','-v','quiet','-select_streams','v:0','-count_packets',
|
| 142 |
+
'-show_entries','stream=nb_read_packets','-of','csv=p=0',video], capture_output=True, text=True)
|
| 143 |
+
try: total = int(pr.stdout.strip())
|
| 144 |
+
except Exception: total = 81
|
| 145 |
+
out = []
|
| 146 |
+
for i in range(n):
|
| 147 |
+
fi = total - n + i; png = os.path.join(td, f'carry_{i:03d}.png')
|
| 148 |
+
subprocess.run(['ffmpeg','-y','-i',video,'-vf',f'select=eq(n\\,{fi})','-vsync','0','-frames:v','1',png],capture_output=True)
|
| 149 |
+
if os.path.exists(png): out.append(png)
|
| 150 |
+
return out
|
| 151 |
+
|
| 152 |
+
def stitch(paths, xf, fps, out):
|
| 153 |
+
if xf == 0 or len(paths) == 1:
|
| 154 |
+
lst = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False)
|
| 155 |
+
for p in paths: lst.write(f"file '{p}'\n")
|
| 156 |
+
lst.close(); subprocess.run(['ffmpeg','-y','-f','concat','-safe','0','-i',lst.name,'-c','copy',out],check=True); os.unlink(lst.name); return
|
| 157 |
+
dur = 81/fps; xfd = xf/fps; inputs = []
|
| 158 |
+
for p in paths: inputs += ['-i', p]
|
| 159 |
+
parts = []; cur = '[0:v]'
|
| 160 |
+
for k in range(1, len(paths)):
|
| 161 |
+
off = max(0, k*dur - k*xfd); nl = f'[v{k}]' if k < len(paths)-1 else ''
|
| 162 |
+
parts.append(f"{cur}[{k}:v]xfade=transition=fade:duration={xfd:.4f}:offset={off:.4f}{nl}"); cur = nl
|
| 163 |
+
subprocess.run(['ffmpeg','-y']+inputs+['-filter_complex','; '.join(parts),'-fps_mode','vfr',out],check=True)
|
| 164 |
+
|
| 165 |
+
def main():
|
| 166 |
+
a = parse_args(); manifest = json.load(open(a.manifest)); td = tempfile.mkdtemp(prefix='ltx_co_')
|
| 167 |
+
print(f"[DRIVER] {len(manifest)} vensters, carry-over={a.carry_over}, crossfade={a.crossfade}", flush=True)
|
| 168 |
+
t0 = time.time(); pipe, mode = load_pipeline(a); print(f"[DRIVER] load {round(time.time()-t0)}s mode={mode}", flush=True)
|
| 169 |
+
rendered = []; prev = None
|
| 170 |
+
for idx, w in enumerate(manifest):
|
| 171 |
+
tw = time.time(); conds = []
|
| 172 |
+
if prev and not w.get('cut_at_start', False):
|
| 173 |
+
cn = min(a.carry_over, len(prev))
|
| 174 |
+
for ci, cf in enumerate(prev[-cn:]):
|
| 175 |
+
conds.append((cf, cn-1-ci, max(0.3, a.carry_weight_base - ci*a.carry_weight_decay)))
|
| 176 |
+
if a.global_anchor and (not prev or w.get('cut_at_start')): conds.append((a.global_anchor, 0, 0.4))
|
| 177 |
+
conds.append((w['keyframe'], w.get('kf_pos', a.num_frames//2), 1.0))
|
| 178 |
+
print(f"[DRIVER] venster {idx+1}/{len(manifest)} {Path(w['out']).name} ({len(conds)} conds)", flush=True)
|
| 179 |
+
(run_native if mode=='native' else (lambda p,ww,c,aa: run_subprocess(ww,c,aa)))(pipe, w, conds, a) if mode=='native' else run_subprocess(w, conds, a)
|
| 180 |
+
if a.carry_over > 0: prev = last_frames(w['out'], a.carry_over, td)
|
| 181 |
+
rendered.append(w['out']); print(f"[DRIVER] venster {idx+1} klaar ({round(time.time()-tw)}s)", flush=True)
|
| 182 |
+
if a.stitch_out: print(f"[DRIVER] stitch -> {a.stitch_out}", flush=True); stitch(rendered, a.crossfade, a.fps, a.stitch_out)
|
| 183 |
+
shutil.rmtree(td, ignore_errors=True); print("[DRIVER] ALL_DONE", flush=True)
|
| 184 |
+
|
| 185 |
+
if __name__ == '__main__':
|
| 186 |
+
main()
|
ltx_loadonce.py
ADDED
|
@@ -0,0 +1,422 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""ltx_loadonce.py v3 -- LOAD-ONCE + PROMPT-CACHE + FP8-CAST + carry-over (28 jun 2026).
|
| 3 |
+
|
| 4 |
+
OOM-HISTORY (A100 80GB, 79.25GB usable):
|
| 5 |
+
v1: Gemma 46GB + DiT bf16 43GB gelijktijdig = 89GB -> OOM.
|
| 6 |
+
v2 (gemma-free): DiT bf16 43GB permanent + VAE-residu 44GB = 87GB -> OOM bij venster 2.
|
| 7 |
+
v3 (dit): DiT fp8 ~22GB + VAE-residu ~44GB + activaties ~12GB = ~78GB -> past.
|
| 8 |
+
|
| 9 |
+
ARCHITECTUUR:
|
| 10 |
+
1. Pipeline aanmaken met QuantizationKind.FP8_CAST.to_policy(CK):
|
| 11 |
+
DiffusionStage._build_transformer() past fp8-cast toe -> DiT ~22GB (was 43GB).
|
| 12 |
+
2. Prompt EENMALIG encoderen, Gemma 46GB volledig vrijgeven.
|
| 13 |
+
3. DiT FP8 EENMALIG bouwen, permanent op GPU houden (geen CPU-swap).
|
| 14 |
+
4. _transformer_ctx patch: geeft pre-built fp8 DiT terug, geen rebuild per venster.
|
| 15 |
+
5. Carry-over: laatste 2 frames van vorig venster als conditioning voor temporele naad.
|
| 16 |
+
|
| 17 |
+
VRAM-BUDGET:
|
| 18 |
+
DiT fp8: ~22GB (permanent op GPU)
|
| 19 |
+
Gemma: 0GB (vrijgegeven na cache-encode)
|
| 20 |
+
VAE-residu: ~44GB (VideoDecoder.to("meta") bug, maar accumuleert niet)
|
| 21 |
+
Activaties: ~12GB (DiT forward, 8 denoising stappen)
|
| 22 |
+
TOTAAL PIEK: ~78GB < 79.25GB usable -- past.
|
| 23 |
+
|
| 24 |
+
Gebruik:
|
| 25 |
+
PYTORCH_ALLOC_CONF=expandable_segments:True DIFFUSERS_ATTN_BACKEND=flash \
|
| 26 |
+
.venv/bin/python ltx_loadonce.py manifest.json [--compile] [--limit 3]
|
| 27 |
+
"""
|
| 28 |
+
|
| 29 |
+
# expandable_segments VOOR torch-import (env-var wordt gelezen bij CUDA-init)
|
| 30 |
+
# NB: PYTORCH_CUDA_ALLOC_CONF is deprecated in PyTorch>=2.5, gebruik PYTORCH_ALLOC_CONF
|
| 31 |
+
import os
|
| 32 |
+
os.environ.setdefault('PYTORCH_ALLOC_CONF', 'expandable_segments:True')
|
| 33 |
+
os.environ.setdefault('PYTORCH_CUDA_ALLOC_CONF', 'expandable_segments:True') # compat
|
| 34 |
+
os.environ.setdefault('DIFFUSERS_ATTN_BACKEND', 'flash')
|
| 35 |
+
|
| 36 |
+
import gc, json, time, sys, argparse, subprocess
|
| 37 |
+
import torch
|
| 38 |
+
torch.backends.cuda.matmul.allow_tf32 = True
|
| 39 |
+
torch.backends.cudnn.allow_tf32 = True
|
| 40 |
+
|
| 41 |
+
from ltx_pipelines.ic_lora import ICLoraPipeline
|
| 42 |
+
from ltx_pipelines.utils.args import ImageConditioningInput
|
| 43 |
+
from ltx_core.loader import LoraPathStrengthAndSDOps, LTXV_LORA_COMFY_RENAMING_MAP
|
| 44 |
+
from ltx_core.model.transformer.compiling import CompilationConfig
|
| 45 |
+
from ltx_core.model.video_vae import TilingConfig, get_video_chunks_number
|
| 46 |
+
from ltx_pipelines.utils.media_io import encode_video
|
| 47 |
+
from ltx_pipelines.utils.types import OffloadMode
|
| 48 |
+
|
| 49 |
+
# ─── ARGS ────────────────────────────────────────────────────────────────────
|
| 50 |
+
ap = argparse.ArgumentParser()
|
| 51 |
+
ap.add_argument('manifest')
|
| 52 |
+
ap.add_argument('--compile', action='store_true')
|
| 53 |
+
ap.add_argument('--limit', type=int, default=0, help='Test: render max N vensters')
|
| 54 |
+
ap.add_argument('--carry', type=int, default=2)
|
| 55 |
+
ap.add_argument('--offload', default='none')
|
| 56 |
+
a = ap.parse_args()
|
| 57 |
+
|
| 58 |
+
CK = '/workspace/models/LTX-2.3/ltx-2.3-22b-distilled.safetensors'
|
| 59 |
+
UP = '/workspace/models/LTX-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors'
|
| 60 |
+
LORA = '/workspace/models/loras/ltx-2.3-22b-ic-lora-colorization-0.9.safetensors'
|
| 61 |
+
GEMMA = '/workspace/models/LTX-2'
|
| 62 |
+
|
| 63 |
+
manifest = json.load(open(a.manifest))
|
| 64 |
+
n_total = len(manifest)
|
| 65 |
+
if a.limit:
|
| 66 |
+
manifest = manifest[:a.limit]
|
| 67 |
+
print(f"[DRIVER] TEST-MODE: {len(manifest)}/{n_total} vensters", flush=True)
|
| 68 |
+
|
| 69 |
+
prompts_set = set(w['prompt'] for w in manifest)
|
| 70 |
+
print(f"[DRIVER] Unieke prompts in manifest: {len(prompts_set)}", flush=True)
|
| 71 |
+
if len(prompts_set) > 1:
|
| 72 |
+
print("[DRIVER] WAARSCHUWING: meerdere unieke prompts -- cache gebruikt prompt[0]", flush=True)
|
| 73 |
+
SHARED_PROMPT = manifest[0]['prompt']
|
| 74 |
+
|
| 75 |
+
# ─── PIPELINE LADEN ──────────────────────────────────────────────────────────
|
| 76 |
+
t0 = time.time()
|
| 77 |
+
pipe = ICLoraPipeline(
|
| 78 |
+
distilled_checkpoint_path=CK,
|
| 79 |
+
spatial_upsampler_path=UP,
|
| 80 |
+
gemma_root=GEMMA,
|
| 81 |
+
loras=(LoraPathStrengthAndSDOps(LORA, 1.0, LTXV_LORA_COMFY_RENAMING_MAP),),
|
| 82 |
+
quantization=None, # fp8 via optimum.quanto NA build (native fp8-cast = H100-only, niet A100)
|
| 83 |
+
compilation_config=CompilationConfig(mode='reduce-overhead', dynamic=False) if a.compile else None,
|
| 84 |
+
offload_mode=OffloadMode(a.offload),
|
| 85 |
+
)
|
| 86 |
+
tiling = TilingConfig.default()
|
| 87 |
+
print(f"[DRIVER] Pipeline geladen ({round(time.time()-t0)}s, compile={a.compile})", flush=True)
|
| 88 |
+
|
| 89 |
+
# ─── VOLGORDE IS KRITIEK: GEMMA EERST, DAN DiT ──────────────────────────────
|
| 90 |
+
# Gemma = 46GB, DiT = 35GB. Gelijktijdig = 81GB > 80GB = OOM.
|
| 91 |
+
# Correct: 1) Gemma laden/encoderen/VRIJGEVEN (46GB -> 0GB)
|
| 92 |
+
# 2) DiT EENMALIG laden + permanent houden (35GB)
|
| 93 |
+
# Peak: max(46GB, 35GB + 17GB activatie) = 52GB -- past ruim in 80GB.
|
| 94 |
+
|
| 95 |
+
# ─── STAP 1: PROMPT-CACHE (Gemma 46GB tijdelijk, dan vrijgeven) ──────────────
|
| 96 |
+
print(f"[CACHE] Prompt encoding 1x voor {len(manifest)} vensters...", flush=True)
|
| 97 |
+
t_enc = time.time()
|
| 98 |
+
# no_grad (niet inference_mode): inference_mode-tensors in VAE conv3d geven
|
| 99 |
+
# "Inference tensors do not track version counter" vanwege in-place ops in CausalConv3d.
|
| 100 |
+
# no_grad is voldoende om gradienten uit te schakelen zonder version-counter-problemen.
|
| 101 |
+
with torch.no_grad():
|
| 102 |
+
_ctx_list = pipe.prompt_encoder(
|
| 103 |
+
[SHARED_PROMPT],
|
| 104 |
+
enhance_first_prompt=False,
|
| 105 |
+
enhance_prompt_seed=42,
|
| 106 |
+
)
|
| 107 |
+
cached_ctx = _ctx_list[0]
|
| 108 |
+
vram_after_enc = torch.cuda.memory_allocated() // 1024**3
|
| 109 |
+
print(f"[CACHE] Encoding klaar ({round(time.time()-t_enc)}s), VRAM={vram_after_enc}GB", flush=True)
|
| 110 |
+
|
| 111 |
+
# Gemma volledig vrijgeven: del Builder-referentie zodat Python GC kan opruimen
|
| 112 |
+
del pipe.prompt_encoder
|
| 113 |
+
gc.collect()
|
| 114 |
+
torch.cuda.empty_cache()
|
| 115 |
+
vram_freed = torch.cuda.memory_allocated() // 1024**3
|
| 116 |
+
print(f"[CACHE] Gemma freed: {vram_after_enc}GB -> {vram_freed}GB VRAM allocated", flush=True)
|
| 117 |
+
|
| 118 |
+
# Lambda-stub: ICLoraPipeline.__call__ doet (ctx_p,) = self.prompt_encoder([prompt], ...)
|
| 119 |
+
# Onze lambda accepteert dezelfde args en retourneert direct de gecachte embedding.
|
| 120 |
+
pipe.prompt_encoder = lambda prompts, **kw: [cached_ctx]
|
| 121 |
+
print("[CACHE] prompt_encoder = cache-lambda actief (0 GPU-gebruik per venster)", flush=True)
|
| 122 |
+
|
| 123 |
+
# Start memory history recording VROEG zodat allocaties traceerbaar zijn
|
| 124 |
+
torch.cuda.memory._record_memory_history(max_entries=500000)
|
| 125 |
+
print("[SNAP] memory history recording gestart", flush=True)
|
| 126 |
+
|
| 127 |
+
# ─── PATCH: gpu_model MONITOR ─────────────────────────────────────────────
|
| 128 |
+
# Meten WANNEER en HOEVEEL gpu_model.__exit__ vrijmaakt (VAE decoder lifecycle).
|
| 129 |
+
import ltx_pipelines.utils.gpu_model as _gm_module
|
| 130 |
+
import ltx_pipelines.utils.helpers as _helpers_module
|
| 131 |
+
from contextlib import contextmanager as _cm
|
| 132 |
+
|
| 133 |
+
_orig_gpu_model = _gm_module.gpu_model
|
| 134 |
+
_orig_cleanup = _helpers_module.cleanup_memory
|
| 135 |
+
|
| 136 |
+
def _patched_cleanup():
|
| 137 |
+
v0 = torch.cuda.memory_allocated() // 1024**3
|
| 138 |
+
_orig_cleanup()
|
| 139 |
+
v1 = torch.cuda.memory_allocated() // 1024**3
|
| 140 |
+
print(f"[DIAG-cleanup] {v0}GB -> {v1}GB", flush=True)
|
| 141 |
+
|
| 142 |
+
_helpers_module.cleanup_memory = _patched_cleanup
|
| 143 |
+
|
| 144 |
+
@_cm
|
| 145 |
+
def _patched_gpu_model(model):
|
| 146 |
+
try:
|
| 147 |
+
yield model
|
| 148 |
+
finally:
|
| 149 |
+
v0 = torch.cuda.memory_allocated() // 1024**3
|
| 150 |
+
torch.cuda.synchronize()
|
| 151 |
+
model.to("meta")
|
| 152 |
+
v1 = torch.cuda.memory_allocated() // 1024**3
|
| 153 |
+
print(f"[DIAG-gpu_model] {type(model).__name__} to(meta): {v0}GB -> {v1}GB", flush=True)
|
| 154 |
+
_patched_cleanup()
|
| 155 |
+
|
| 156 |
+
_gm_module.gpu_model = _patched_gpu_model
|
| 157 |
+
# Patch also in blocks.py (VideoDecoder uses it from there)
|
| 158 |
+
import ltx_pipelines.utils.blocks as _blocks_module
|
| 159 |
+
_blocks_module.gpu_model = _patched_gpu_model
|
| 160 |
+
print("[DIAG] gpu_model + cleanup_memory gepatcht voor VRAM-monitoring", flush=True)
|
| 161 |
+
|
| 162 |
+
# ─── STAP 2: DiT LADEN + FP8 QUANTISATIE (optimum.quanto) ───────────────────
|
| 163 |
+
# Native LTX fp8-cast gebruikt Triton-kernel fp8e4nv = H100-only, niet op A100.
|
| 164 |
+
# Oplossing: optimum.quanto qfloat8 = pure Python fp8-opslag (float8_e4m3fn), werkt
|
| 165 |
+
# overal. Gewichten worden in fp8 opgeslagen (~22GB), upcast naar bf16 voor compute.
|
| 166 |
+
#
|
| 167 |
+
# VRAM-budget (A100 80GB = 79.25GB usable):
|
| 168 |
+
# DiT bf16 build: 43GB (tijdelijk, tijdens quantize)
|
| 169 |
+
# DiT fp8 na quant: ~22GB (permanent op GPU, geen CPU-swap nodig)
|
| 170 |
+
# Quantize piek: 43+22=65GB (beide tegelijk, maar bf16 vrijgegeven na freeze)
|
| 171 |
+
# VAE-decode residu: ~44GB (niet opgeheven door to("meta"), accumuleert niet)
|
| 172 |
+
# DiT-forward piek: +12GB activaties
|
| 173 |
+
# STABIEL PIEK: 22+44+12 = 78GB < 79.25GB -- past.
|
| 174 |
+
from contextlib import contextmanager
|
| 175 |
+
from optimum.quanto import quantize as _quanto_quantize, qfloat8 as _qf8, freeze as _quanto_freeze
|
| 176 |
+
|
| 177 |
+
print("[LOADONCE] DiT laden (bf16, 1x)...", flush=True)
|
| 178 |
+
t_dit = time.time()
|
| 179 |
+
with torch.no_grad():
|
| 180 |
+
_pre_built_dit = pipe.stage_1._build_transformer()
|
| 181 |
+
vram_bf16 = torch.cuda.memory_allocated() // 1024**3
|
| 182 |
+
print(f"[LOADONCE] DiT bf16 geladen ({round(time.time()-t_dit)}s), VRAM={vram_bf16}GB", flush=True)
|
| 183 |
+
|
| 184 |
+
print("[LOADONCE] optimum.quanto fp8 quantisatie...", flush=True)
|
| 185 |
+
t_q = time.time()
|
| 186 |
+
# VOOR quantize: registreer id(originele_nn_linear) -> vm_module_attrnaam
|
| 187 |
+
# zodat we na quantize de stale referenties CORRECT kunnen herverbinden.
|
| 188 |
+
# Probleem: video_preprocessor.patchify_proj en audio_preprocessor.patchify_proj
|
| 189 |
+
# heten BEIDEN 'patchify_proj' maar zijn vm.patchify_proj vs vm.audio_patchify_proj.
|
| 190 |
+
# Naam-gebaseerde lookup werkt niet; ID-gebaseerde lookup wel.
|
| 191 |
+
_vm = _pre_built_dit.velocity_model
|
| 192 |
+
_linear_id_to_vmattr = {}
|
| 193 |
+
for _attr in dir(_vm):
|
| 194 |
+
if not _attr.startswith('_'):
|
| 195 |
+
_obj = getattr(_vm, _attr, None)
|
| 196 |
+
if isinstance(_obj, torch.nn.Linear):
|
| 197 |
+
_linear_id_to_vmattr[id(_obj)] = _attr
|
| 198 |
+
|
| 199 |
+
_quanto_quantize(_pre_built_dit, weights=_qf8)
|
| 200 |
+
|
| 201 |
+
# NA quantize: vm._modules['patchify_proj'] = QLinear (nieuw), originele nn.Linear.weight=None.
|
| 202 |
+
# TransformerArgsPreprocessors (geen nn.Module) houden stale originele Linear.
|
| 203 |
+
# Fix via ID-mapping: stale.id -> vmattr -> vm.{vmattr} (=QLinear)
|
| 204 |
+
def _fix_stale_by_id(obj, vm, id_map, depth=0):
|
| 205 |
+
if depth > 6: return
|
| 206 |
+
for k, v in list(getattr(obj, '__dict__', {}).items()):
|
| 207 |
+
if isinstance(v, torch.nn.Linear) and getattr(v, 'weight', True) is None:
|
| 208 |
+
vmattr = id_map.get(id(v))
|
| 209 |
+
if vmattr:
|
| 210 |
+
replacement = getattr(vm, vmattr, None)
|
| 211 |
+
if replacement is not None:
|
| 212 |
+
setattr(obj, k, replacement)
|
| 213 |
+
print(f"[FIX] {type(obj).__name__}.{k} -> vm.{vmattr} ({type(replacement).__name__})", flush=True)
|
| 214 |
+
elif not isinstance(v, (torch.nn.Module, torch.Tensor)) and hasattr(v, '__dict__'):
|
| 215 |
+
_fix_stale_by_id(v, vm, id_map, depth+1)
|
| 216 |
+
|
| 217 |
+
for _preprocessor in [_vm.video_args_preprocessor, getattr(_vm, 'audio_args_preprocessor', None)]:
|
| 218 |
+
if _preprocessor is not None:
|
| 219 |
+
_fix_stale_by_id(_preprocessor, _vm, _linear_id_to_vmattr)
|
| 220 |
+
|
| 221 |
+
_quanto_freeze(_pre_built_dit)
|
| 222 |
+
torch.cuda.empty_cache()
|
| 223 |
+
gc.collect()
|
| 224 |
+
vram_dit = torch.cuda.memory_allocated() // 1024**3
|
| 225 |
+
print(f"[LOADONCE] DiT fp8 klaar ({round(time.time()-t_q)}s), VRAM={vram_dit}GB "
|
| 226 |
+
f"(-{vram_bf16-vram_dit}GB tov bf16)", flush=True)
|
| 227 |
+
print(f"[LOADONCE] VRAM-budget: {vram_dit}GB DiT + 44GB VAE-residu + 12GB act = ~{vram_dit+56}GB < 79.25GB", flush=True)
|
| 228 |
+
|
| 229 |
+
@contextmanager
|
| 230 |
+
def _permanent_transformer_ctx(**kwargs):
|
| 231 |
+
"""FP8 DiT permanent op GPU -- geen CPU-swap (to("cpu") hangt bij quanto-modellen).
|
| 232 |
+
Budget: DiT_fp8(~17GB) + VAE-residu(~44GB) = ~61GB base.
|
| 233 |
+
DiT-forward piek: +16GB activaties = ~77GB < 80GB OK.
|
| 234 |
+
VAE-decode piek (window 2+): 17+44+17=78GB -- net onder 79.25GB grens.
|
| 235 |
+
"""
|
| 236 |
+
yield _pre_built_dit # DiT fp8 forward (8 denoising stappen)
|
| 237 |
+
# Na DiT forward: activatie-tensors vrijgeven
|
| 238 |
+
gc.collect()
|
| 239 |
+
torch.cuda.empty_cache()
|
| 240 |
+
print(f"[LOADONCE] Post-DiT: VRAM={torch.cuda.memory_allocated()//1024**3}GB", flush=True)
|
| 241 |
+
|
| 242 |
+
# Patch stage_1. stage_2 niet aangesproken bij skip_stage_2=True maar patch als voorzorg.
|
| 243 |
+
pipe.stage_1._transformer_ctx = _permanent_transformer_ctx
|
| 244 |
+
pipe.stage_2._transformer_ctx = _permanent_transformer_ctx
|
| 245 |
+
print("[LOADONCE] _transformer_ctx gepatcht", flush=True)
|
| 246 |
+
|
| 247 |
+
# ─── PATCH: tiled VAE encode voor image_conditioner ──────────────────────────
|
| 248 |
+
# ICLoraPipeline._create_conditionings roept append_ic_lora_reference_video_conditionings
|
| 249 |
+
# aan met tiling_config=None -> grote Conv3d allocatie (17GB) bij hoge resolutie.
|
| 250 |
+
# Met DiT_fp8(17GB) + VAE-residu(45GB) = 62GB base: 17.25GB vrij < 17GB benodigde alloc.
|
| 251 |
+
# Fix: patch de functie om TilingConfig.default() (768px tiles) door te geven.
|
| 252 |
+
# Peak per tile: (768/960)^2 * 17GB ≈ 11GB, 62+11=73GB < 79.25GB -> past.
|
| 253 |
+
import ltx_pipelines.iclora_utils as _icu_mod
|
| 254 |
+
import ltx_pipelines.ic_lora as _ic_lora_mod
|
| 255 |
+
|
| 256 |
+
_orig_append_ic = _icu_mod.append_ic_lora_reference_video_conditionings
|
| 257 |
+
|
| 258 |
+
# 512px spatial tiles: (512/768)^2 * 13.62GB ≈ 6GB per tile, past ruim in 17GB vrij.
|
| 259 |
+
from ltx_core.model.video_vae.tiling import SpatialTilingConfig as _STC, TemporalTilingConfig as _TTC
|
| 260 |
+
_ENCODE_TILING = TilingConfig(
|
| 261 |
+
spatial_config=_STC(tile_size_in_pixels=512, tile_overlap_in_pixels=32),
|
| 262 |
+
temporal_config=_TTC(tile_size_in_frames=80, tile_overlap_in_frames=24),
|
| 263 |
+
)
|
| 264 |
+
|
| 265 |
+
def _tiled_append_ic(*args, tiling_config=None, **kwargs):
|
| 266 |
+
"""Forceer tiled VAE encode (512px tiles) om OOM bij grote Conv3d te voorkomen."""
|
| 267 |
+
return _orig_append_ic(*args, tiling_config=_ENCODE_TILING, **kwargs)
|
| 268 |
+
|
| 269 |
+
_icu_mod.append_ic_lora_reference_video_conditionings = _tiled_append_ic
|
| 270 |
+
_ic_lora_mod.append_ic_lora_reference_video_conditionings = _tiled_append_ic
|
| 271 |
+
print("[LOADONCE] Tiled VAE encode gepatcht (768px tiles) -- render-loop start", flush=True)
|
| 272 |
+
|
| 273 |
+
# ─── CARRY-OVER HELPER ───────────────────────────────────────────────────────
|
| 274 |
+
os.makedirs('/tmp/carry', exist_ok=True)
|
| 275 |
+
|
| 276 |
+
def last_frames(video_path, n):
|
| 277 |
+
r = subprocess.run(
|
| 278 |
+
['ffprobe', '-v', 'quiet', '-select_streams', 'v:0', '-count_packets',
|
| 279 |
+
'-show_entries', 'stream=nb_read_packets', '-of', 'csv=p=0', video_path],
|
| 280 |
+
capture_output=True, text=True
|
| 281 |
+
)
|
| 282 |
+
try:
|
| 283 |
+
total = int(r.stdout.strip())
|
| 284 |
+
except Exception:
|
| 285 |
+
total = 81
|
| 286 |
+
frames = []
|
| 287 |
+
for ci in range(n):
|
| 288 |
+
frame_idx = total - 1 - ci # ci=0 = laatste frame -> positie 0 in volgend venster
|
| 289 |
+
png = f'/tmp/carry/c{ci}.png'
|
| 290 |
+
subprocess.run(
|
| 291 |
+
['ffmpeg', '-y', '-i', video_path,
|
| 292 |
+
'-vf', f'select=eq(n\\,{frame_idx})', '-vsync', '0', '-frames:v', '1', png],
|
| 293 |
+
capture_output=True
|
| 294 |
+
)
|
| 295 |
+
if os.path.exists(png):
|
| 296 |
+
frames.append((png, ci))
|
| 297 |
+
return frames
|
| 298 |
+
|
| 299 |
+
# ─── RENDER LOOP ─────────────────────────────────────────────────────────────
|
| 300 |
+
prev_out = None
|
| 301 |
+
t_total = time.time()
|
| 302 |
+
|
| 303 |
+
for i, w in enumerate(manifest):
|
| 304 |
+
tw = time.time()
|
| 305 |
+
imgs = []
|
| 306 |
+
|
| 307 |
+
# Carry-over: laatste N gekleurde frames van vorig venster als conditioning pos 0..N-1
|
| 308 |
+
if prev_out and not w.get('cut_at_start', False):
|
| 309 |
+
co_frames = last_frames(prev_out, a.carry)
|
| 310 |
+
for (cf_path, ci) in co_frames:
|
| 311 |
+
weight = round(0.85 - ci * 0.20, 2)
|
| 312 |
+
imgs.append(ImageConditioningInput(path=cf_path, frame_idx=ci, strength=weight))
|
| 313 |
+
|
| 314 |
+
# Keyframe-conditioning van dit venster
|
| 315 |
+
imgs.append(ImageConditioningInput(
|
| 316 |
+
path=w['keyframe'],
|
| 317 |
+
frame_idx=w.get('kf_pos', 40),
|
| 318 |
+
strength=1.0
|
| 319 |
+
))
|
| 320 |
+
|
| 321 |
+
vram_pre = torch.cuda.memory_allocated() // 1024**3
|
| 322 |
+
print(f"[{i+1}/{len(manifest)}] {os.path.basename(w['out'])} "
|
| 323 |
+
f"({len(imgs)} conds, VRAM={vram_pre}GB) ...", flush=True)
|
| 324 |
+
|
| 325 |
+
os.makedirs(os.path.dirname(w['out']), exist_ok=True)
|
| 326 |
+
# Geef eventueel gereserveerde (maar ongebruikte) CUDA-blokken vrij vóór VAE-encode
|
| 327 |
+
torch.cuda.empty_cache()
|
| 328 |
+
_vram_pre_pipe = torch.cuda.memory_allocated() // 1024**3
|
| 329 |
+
print(f"[PIPE] start VRAM={_vram_pre_pipe}GB", flush=True)
|
| 330 |
+
with torch.no_grad():
|
| 331 |
+
video, audio = pipe(
|
| 332 |
+
prompt=w['prompt'], # lambda negeert dit, cached_ctx wordt gebruikt
|
| 333 |
+
seed=42,
|
| 334 |
+
height=1088,
|
| 335 |
+
width=1920,
|
| 336 |
+
num_frames=81,
|
| 337 |
+
frame_rate=24,
|
| 338 |
+
images=imgs,
|
| 339 |
+
video_conditioning=[(w['gray'], 1.0)],
|
| 340 |
+
tiling_config=tiling,
|
| 341 |
+
conditioning_attention_strength=1.0,
|
| 342 |
+
skip_stage_2=True,
|
| 343 |
+
conditioning_attention_mask=None,
|
| 344 |
+
)
|
| 345 |
+
|
| 346 |
+
_vram_post_pipe = torch.cuda.memory_allocated() // 1024**3
|
| 347 |
+
print(f"[PIPE] eind VRAM={_vram_post_pipe}GB (voor encode_video)", flush=True)
|
| 348 |
+
|
| 349 |
+
# Window 1: snapshot wordt genomen na encode_video (recording al actief)
|
| 350 |
+
|
| 351 |
+
encode_video(
|
| 352 |
+
video=video,
|
| 353 |
+
fps=24,
|
| 354 |
+
audio=audio,
|
| 355 |
+
output_path=w['out'],
|
| 356 |
+
video_chunks_number=get_video_chunks_number(81, tiling),
|
| 357 |
+
)
|
| 358 |
+
_vram_post_enc = torch.cuda.memory_allocated() // 1024**3
|
| 359 |
+
print(f"[PIPE] na encode_video VRAM={_vram_post_enc}GB", flush=True)
|
| 360 |
+
prev_out = w['out']
|
| 361 |
+
elapsed = round(time.time() - tw)
|
| 362 |
+
|
| 363 |
+
# Diagnostiek: Zoek grote GPU-tensors voor del
|
| 364 |
+
_vram_before_del = torch.cuda.memory_allocated() // 1024**3
|
| 365 |
+
print(f"[DEBUG] VRAM voor del: {_vram_before_del}GB", flush=True)
|
| 366 |
+
|
| 367 |
+
del video, audio
|
| 368 |
+
gc.collect()
|
| 369 |
+
torch.cuda.empty_cache()
|
| 370 |
+
torch.cuda.synchronize()
|
| 371 |
+
_vram_post = torch.cuda.memory_allocated() // 1024**3
|
| 372 |
+
print(f"[DEBUG] VRAM post-cleanup: {_vram_post}GB", flush=True)
|
| 373 |
+
|
| 374 |
+
# Window 1: snapshot analyseren (ALL states, ALL sizes)
|
| 375 |
+
if i == 0:
|
| 376 |
+
try:
|
| 377 |
+
_snap = torch.cuda.memory._snapshot()
|
| 378 |
+
torch.cuda.memory._record_memory_history(enabled=None)
|
| 379 |
+
|
| 380 |
+
# Verzamel ALLE actieve blokken (active_allocated + active_pending_free)
|
| 381 |
+
_state_totals = {}
|
| 382 |
+
_all_active = []
|
| 383 |
+
for _seg in _snap.get('segments', []):
|
| 384 |
+
for _blk in _seg.get('blocks', []):
|
| 385 |
+
_st = _blk.get('state', 'unknown')
|
| 386 |
+
_sz = _blk.get('size', 0)
|
| 387 |
+
_state_totals[_st] = _state_totals.get(_st, 0) + _sz
|
| 388 |
+
if _st in ('active_allocated', 'active_pending_free') and _sz > 10 * 1024**2:
|
| 389 |
+
_frames = _blk.get('frames', [])
|
| 390 |
+
_trace = ' -> '.join(
|
| 391 |
+
f"{_f.get('name','?')}({os.path.basename(_f.get('filename','?'))}:{_f.get('line','?')})"
|
| 392 |
+
for _f in _frames[-8:]
|
| 393 |
+
) if _frames else 'NO_TRACE'
|
| 394 |
+
_all_active.append((_sz / 1024**3, _st, _trace))
|
| 395 |
+
|
| 396 |
+
# Per-state summary
|
| 397 |
+
print(f"[SNAP] Block states totalen:", flush=True)
|
| 398 |
+
for _st, _stb in sorted(_state_totals.items(), key=lambda x: -x[1]):
|
| 399 |
+
print(f"[SNAP] {_st}: {_stb/1024**3:.2f}GB", flush=True)
|
| 400 |
+
|
| 401 |
+
# Top actieve blokken
|
| 402 |
+
_all_active.sort(reverse=True)
|
| 403 |
+
print(f"[SNAP] Top 40 actieve blokken (>10MB):", flush=True)
|
| 404 |
+
_seen_gb = 0
|
| 405 |
+
for _gb, _st, _tr in _all_active[:40]:
|
| 406 |
+
_seen_gb += _gb
|
| 407 |
+
print(f"[SNAP] {_gb:.3f}GB [{_st}] | {_tr}", flush=True)
|
| 408 |
+
print(f"[SNAP] Top-40 totaal: {_seen_gb:.1f}GB | memory_allocated={_vram_post}GB", flush=True)
|
| 409 |
+
except Exception as _se:
|
| 410 |
+
print(f"[SNAP] snapshot fout: {_se}", flush=True)
|
| 411 |
+
try:
|
| 412 |
+
torch.cuda.memory._record_memory_history(enabled=None)
|
| 413 |
+
except Exception:
|
| 414 |
+
pass
|
| 415 |
+
|
| 416 |
+
vram_post = _vram_post
|
| 417 |
+
print(f"[{i+1}/{len(manifest)}] KLAAR {elapsed}s | VRAM_post={vram_post}GB", flush=True)
|
| 418 |
+
|
| 419 |
+
total_min = round((time.time() - t_total) / 60, 1)
|
| 420 |
+
per_v = round(total_min * 60 / max(len(manifest), 1))
|
| 421 |
+
print(f"[DRIVER] LOADONCE_DONE -- {len(manifest)} vensters in {total_min} min "
|
| 422 |
+
f"({per_v}s/venster gemiddeld)", flush=True)
|
ltx_loadonce_fp8.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""ltx_loadonce.py — LOAD-ONCE + torch.compile LTX-22b carry-over render (taak #6).
|
| 3 |
+
Echte ICLoraPipeline-API (geen subprocess-reload). Model 1x laden + compile 1x (geamortiseerd).
|
| 4 |
+
Carry-over: laatste N frames vorig venster -> ImageConditioningInput op pos 0..N-1.
|
| 5 |
+
Run: .venv/bin/python ltx_loadonce.py manifest.json [--compile] [--limit N]
|
| 6 |
+
"""
|
| 7 |
+
import json, time, os, sys, argparse, subprocess
|
| 8 |
+
import torch
|
| 9 |
+
torch.backends.cuda.matmul.allow_tf32 = True
|
| 10 |
+
torch.backends.cudnn.allow_tf32 = True
|
| 11 |
+
from ltx_pipelines.ic_lora import ICLoraPipeline
|
| 12 |
+
from ltx_pipelines.utils.args import ImageConditioningInput
|
| 13 |
+
from ltx_core.loader import LoraPathStrengthAndSDOps, LTXV_LORA_COMFY_RENAMING_MAP
|
| 14 |
+
from ltx_core.model.transformer.compiling import CompilationConfig
|
| 15 |
+
from ltx_core.model.video_vae import TilingConfig, get_video_chunks_number
|
| 16 |
+
from ltx_pipelines.utils.media_io import encode_video
|
| 17 |
+
from ltx_pipelines.utils.types import OffloadMode
|
| 18 |
+
from ltx_pipelines.utils.quantization_factory import QuantizationKind
|
| 19 |
+
|
| 20 |
+
ap = argparse.ArgumentParser(); ap.add_argument('manifest')
|
| 21 |
+
ap.add_argument('--compile', action='store_true'); ap.add_argument('--limit', type=int, default=0)
|
| 22 |
+
ap.add_argument('--carry', type=int, default=2); ap.add_argument('--offload', default='none')
|
| 23 |
+
a = ap.parse_args()
|
| 24 |
+
CK='/workspace/models/LTX-2.3/ltx-2.3-22b-distilled.safetensors'
|
| 25 |
+
UP='/workspace/models/LTX-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors'
|
| 26 |
+
LORA='/workspace/models/loras/ltx-2.3-22b-ic-lora-colorization-0.9.safetensors'
|
| 27 |
+
GEMMA='/workspace/models/LTX-2'
|
| 28 |
+
manifest = json.load(open(a.manifest))
|
| 29 |
+
if a.limit: manifest = manifest[:a.limit]
|
| 30 |
+
|
| 31 |
+
t0=time.time()
|
| 32 |
+
pipe = ICLoraPipeline(
|
| 33 |
+
distilled_checkpoint_path=CK, spatial_upsampler_path=None, gemma_root=GEMMA, # upsampler niet nodig (skip_stage_2)
|
| 34 |
+
loras=(LoraPathStrengthAndSDOps(LORA, 1.0, LTXV_LORA_COMFY_RENAMING_MAP),),
|
| 35 |
+
quantization=QuantizationKind.FP8_CAST.to_policy(CK),
|
| 36 |
+
compilation_config=CompilationConfig(mode='reduce-overhead', dynamic=False) if a.compile else None,
|
| 37 |
+
offload_mode=OffloadMode(a.offload))
|
| 38 |
+
tiling = TilingConfig.default()
|
| 39 |
+
print(f"PIPELINE_LOADED {round(time.time()-t0)}s (compile={a.compile})", flush=True)
|
| 40 |
+
os.makedirs('/tmp/carry', exist_ok=True)
|
| 41 |
+
|
| 42 |
+
def last_frames(v, n):
|
| 43 |
+
r=subprocess.run(['ffprobe','-v','quiet','-select_streams','v:0','-count_packets','-show_entries','stream=nb_read_packets','-of','csv=p=0',v],capture_output=True,text=True)
|
| 44 |
+
try: tf=int(r.stdout.strip())
|
| 45 |
+
except: tf=81
|
| 46 |
+
out=[]
|
| 47 |
+
for ci in range(n):
|
| 48 |
+
cf=f'/tmp/carry/c{ci}.png'
|
| 49 |
+
subprocess.run(['ffmpeg','-y','-i',v,'-vf',f'select=eq(n\\,{tf-1-ci})','-vsync','0','-frames:v','1',cf],capture_output=True)
|
| 50 |
+
if os.path.exists(cf): out.append((cf,ci))
|
| 51 |
+
return out
|
| 52 |
+
|
| 53 |
+
prev=None
|
| 54 |
+
for i,w in enumerate(manifest):
|
| 55 |
+
tw=time.time(); imgs=[]
|
| 56 |
+
if prev and not w.get('cut_at_start'):
|
| 57 |
+
for (cf,ci) in last_frames(prev, a.carry):
|
| 58 |
+
imgs.append(ImageConditioningInput(path=cf, frame_idx=ci, strength=round(0.85-ci*0.20,2)))
|
| 59 |
+
imgs.append(ImageConditioningInput(path=w['keyframe'], frame_idx=w.get('kf_pos',40), strength=1.0))
|
| 60 |
+
video, audio = pipe(prompt=w['prompt'], seed=42, height=1088, width=1920, num_frames=81, frame_rate=24,
|
| 61 |
+
images=imgs, video_conditioning=[(w['gray'],1.0)], tiling_config=tiling,
|
| 62 |
+
conditioning_attention_strength=1.0, skip_stage_2=True, conditioning_attention_mask=None)
|
| 63 |
+
encode_video(video=video, fps=24, audio=audio, output_path=w['out'], video_chunks_number=get_video_chunks_number(81, tiling))
|
| 64 |
+
prev=w['out']
|
| 65 |
+
print(f"[{i+1}/{len(manifest)}] {os.path.basename(w['out'])} ({round(time.time()-tw)}s)", flush=True)
|
| 66 |
+
print("LOADONCE_DONE", flush=True)
|
ltx_seamless.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""ltx_seamless.py — naadloze LTX-22b colorization-render via carry-over conditioning.
|
| 3 |
+
Per venster: conditioneer op de laatste frames van het VORIGE venster (--image op pos 0,1)
|
| 4 |
+
+ de scene-keyframe (--image op kf_pos) -> venster start vanuit vorig eind -> geen naden.
|
| 5 |
+
Gebruikt de proven ltx_pipelines.ic_lora CLI (geen onzekere native API). Stitch + crossfade aan het eind.
|
| 6 |
+
Run: PY=.venv/bin/python python3 ltx_seamless.py manifest.json [--offload-mode none]
|
| 7 |
+
"""
|
| 8 |
+
import json, subprocess, os, sys, time, argparse
|
| 9 |
+
ap = argparse.ArgumentParser(); ap.add_argument('manifest')
|
| 10 |
+
ap.add_argument('--offload-mode', default=None); ap.add_argument('--carry', type=int, default=2)
|
| 11 |
+
ap.add_argument('--stitch-out', default='/workspace/ltx_full_seamless.mp4'); a = ap.parse_args()
|
| 12 |
+
PY='/workspace/LTX-2/.venv/bin/python'
|
| 13 |
+
CK='/workspace/models/LTX-2.3/ltx-2.3-22b-distilled.safetensors'
|
| 14 |
+
UP='/workspace/models/LTX-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors'
|
| 15 |
+
LORA='/workspace/models/loras/ltx-2.3-22b-ic-lora-colorization-0.9.safetensors'
|
| 16 |
+
GEMMA='/workspace/models/LTX-2'
|
| 17 |
+
manifest = json.load(open(a.manifest))
|
| 18 |
+
os.makedirs('/workspace/ltx_co_out', exist_ok=True); os.makedirs('/tmp/carry', exist_ok=True)
|
| 19 |
+
|
| 20 |
+
def total_frames(v):
|
| 21 |
+
r = subprocess.run(['ffprobe','-v','quiet','-select_streams','v:0','-count_packets','-show_entries','stream=nb_read_packets','-of','csv=p=0',v],capture_output=True,text=True)
|
| 22 |
+
try: return int(r.stdout.strip())
|
| 23 |
+
except: return 81
|
| 24 |
+
|
| 25 |
+
def extract_frame(v, idx, out):
|
| 26 |
+
subprocess.run(['ffmpeg','-y','-i',v,'-vf',f'select=eq(n\\,{idx})','-vsync','0','-frames:v','1',out],capture_output=True)
|
| 27 |
+
return os.path.exists(out)
|
| 28 |
+
|
| 29 |
+
prev_out=None; rendered=[]
|
| 30 |
+
for i,w in enumerate(manifest):
|
| 31 |
+
tw=time.time(); imgs=[]
|
| 32 |
+
if prev_out and not w.get('cut_at_start'):
|
| 33 |
+
tf=total_frames(prev_out)
|
| 34 |
+
for ci in range(a.carry): # laatste frame -> pos 0, voorlaatste -> pos 1
|
| 35 |
+
idx=tf-1-ci; cf=f'/tmp/carry/c{ci}.png'
|
| 36 |
+
if extract_frame(prev_out, idx, cf):
|
| 37 |
+
imgs.append((cf, ci, round(0.85-ci*0.20,2))) # pos0=laatste(weight.85), pos1=voorlaatste(.65)
|
| 38 |
+
imgs.append((w['keyframe'], w.get('kf_pos',40), 1.0))
|
| 39 |
+
cmd=[PY,'-m','ltx_pipelines.ic_lora','--distilled-checkpoint-path',CK,'--spatial-upsampler-path',UP,
|
| 40 |
+
'--gemma-root',GEMMA,'--lora',LORA,'0.85','--video-conditioning',w['gray'],'1.0',
|
| 41 |
+
'--width','1920','--height','1088','--num-frames','81','--frame-rate','24','--seed','42',
|
| 42 |
+
'--skip-stage-2','--output-path',w['out'],'--prompt',w['prompt']]
|
| 43 |
+
if a.offload_mode: cmd+=['--offload-mode',a.offload_mode]
|
| 44 |
+
for (p,pos,wt) in imgs: cmd+=['--image',p,str(pos),str(wt)]
|
| 45 |
+
print(f"[{i+1}/{len(manifest)}] {os.path.basename(w['out'])} carry={len(imgs)-1} ...",flush=True)
|
| 46 |
+
r=subprocess.run(cmd,capture_output=True,text=True)
|
| 47 |
+
if not os.path.exists(w['out']):
|
| 48 |
+
print(f"FOUT venster {i}: {r.stderr[-400:]}",flush=True); sys.exit(1)
|
| 49 |
+
prev_out=w['out']; rendered.append(w['out'])
|
| 50 |
+
print(f"[{i+1}] klaar ({round(time.time()-tw)}s)",flush=True)
|
| 51 |
+
# stitch (concat; crossfade optioneel later)
|
| 52 |
+
lst='/workspace/stitch.txt'; open(lst,'w').write('\n'.join(f"file '{p}'" for p in rendered))
|
| 53 |
+
subprocess.run(['ffmpeg','-y','-f','concat','-safe','0','-i',lst,'-c:v','libx264','-crf','18','-pix_fmt','yuv420p','-r','30',a.stitch_out],capture_output=True)
|
| 54 |
+
print(f"STITCH_DONE -> {a.stitch_out}",flush=True); print("ALL_DONE",flush=True)
|
ltx_seamless_v2.py
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""ltx_seamless_v2.py -- Geintegreerde re-render met alle fixes (29 jun 2026).
|
| 3 |
+
|
| 4 |
+
FIXES vs v1:
|
| 5 |
+
P2 (kleur-lag): scene-cut-aware manifest (extra_anchors voor mid-cut vensters,
|
| 6 |
+
cut_at_start=True voor vroege cuts). Lag 52f -> <=5f per scene-grens.
|
| 7 |
+
P3 (RGB-speckle): dark-flat neutralize op keyframes voor conditioning:
|
| 8 |
+
pixels met Y<80 & lokale_std<12 -> R=G=B=Y. Doodt chroma-seed in donkere vlakken.
|
| 9 |
+
P4 (wagon-flikker): ref_003541.png als extra_anchor op pos 60 voor w43 (via manifest).
|
| 10 |
+
|
| 11 |
+
P1 (resolutie): --skip-stage-2 BEHOUDEN. Post-hoc SeedVR2 op RTX 5080
|
| 12 |
+
met --color_correction lab (bewaart palet 1:1, gratis lokale GPU).
|
| 13 |
+
|
| 14 |
+
PARALLEL-KLAAR:
|
| 15 |
+
5 scenes (w0-w8, w9-w22, w23-w36, w37-w50, w51-w66).
|
| 16 |
+
Render subset: --scene N (render alle vensters van scene N).
|
| 17 |
+
Langste scene: 16 vensters (~17 min). N kaarten -> Nx sneller.
|
| 18 |
+
|
| 19 |
+
Gebruik:
|
| 20 |
+
python3 ltx_seamless_v2.py manifest.json
|
| 21 |
+
python3 ltx_seamless_v2.py manifest.json --scene 3 # alleen scene 3
|
| 22 |
+
python3 ltx_seamless_v2.py manifest.json --first-window 20 # resume vanaf w20
|
| 23 |
+
"""
|
| 24 |
+
import json, subprocess, os, sys, time, argparse, tempfile
|
| 25 |
+
import numpy as np
|
| 26 |
+
|
| 27 |
+
ap = argparse.ArgumentParser()
|
| 28 |
+
ap.add_argument('manifest')
|
| 29 |
+
ap.add_argument('--offload-mode', default=None)
|
| 30 |
+
ap.add_argument('--carry', type=int, default=2, help='Aantal carry-over frames')
|
| 31 |
+
ap.add_argument('--stitch-out', default='/workspace/ltx_full_v3.mp4')
|
| 32 |
+
ap.add_argument('--scene', type=int, default=-1, help='Render alleen scene N (-1 = alle)')
|
| 33 |
+
ap.add_argument('--first-window', type=int, default=0, help='Start bij venster N (resume)')
|
| 34 |
+
a = ap.parse_args()
|
| 35 |
+
|
| 36 |
+
PY = '/workspace/LTX-2/.venv/bin/python'
|
| 37 |
+
CK = '/workspace/models/LTX-2.3/ltx-2.3-22b-distilled.safetensors'
|
| 38 |
+
UP = '/workspace/models/LTX-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors'
|
| 39 |
+
LORA = '/workspace/models/loras/ltx-2.3-22b-ic-lora-colorization-0.9.safetensors'
|
| 40 |
+
GEMMA = '/workspace/models/LTX-2'
|
| 41 |
+
|
| 42 |
+
manifest_all = json.load(open(a.manifest))
|
| 43 |
+
|
| 44 |
+
# ── Filter op scene / first-window ───────────────────────────────────────────
|
| 45 |
+
if a.scene >= 0:
|
| 46 |
+
manifest_all = [w for w in manifest_all if w.get('scene_id', 0) == a.scene]
|
| 47 |
+
if not manifest_all:
|
| 48 |
+
print(f'FOUT: scene {a.scene} niet gevonden in manifest', flush=True)
|
| 49 |
+
sys.exit(1)
|
| 50 |
+
print(f'[DRIVER] Scene {a.scene}: {len(manifest_all)} vensters', flush=True)
|
| 51 |
+
|
| 52 |
+
if a.first_window > 0:
|
| 53 |
+
# find index within filtered manifest
|
| 54 |
+
skip = sum(1 for w in manifest_all if int(w['out'].split('/w')[-1].split('.mp4')[0]) < a.first_window)
|
| 55 |
+
manifest_all = manifest_all[skip:]
|
| 56 |
+
print(f'[DRIVER] Resume vanaf w{a.first_window} ({len(manifest_all)} vensters resterend)', flush=True)
|
| 57 |
+
|
| 58 |
+
os.makedirs('/workspace/ltx_co_out', exist_ok=True)
|
| 59 |
+
os.makedirs('/tmp/carry', exist_ok=True)
|
| 60 |
+
os.makedirs('/tmp/kf_proc', exist_ok=True)
|
| 61 |
+
|
| 62 |
+
# ── Helpers ───────────────────────────────────────────────────────────────────
|
| 63 |
+
def total_frames(v):
|
| 64 |
+
r = subprocess.run(
|
| 65 |
+
['ffprobe', '-v', 'quiet', '-select_streams', 'v:0', '-count_packets',
|
| 66 |
+
'-show_entries', 'stream=nb_read_packets', '-of', 'csv=p=0', v],
|
| 67 |
+
capture_output=True, text=True)
|
| 68 |
+
try:
|
| 69 |
+
return int(r.stdout.strip())
|
| 70 |
+
except Exception:
|
| 71 |
+
return 81
|
| 72 |
+
|
| 73 |
+
def extract_frame(v, idx, out):
|
| 74 |
+
subprocess.run(
|
| 75 |
+
['ffmpeg', '-y', '-i', v, '-vf', f'select=eq(n\\,{idx})',
|
| 76 |
+
'-vsync', '0', '-frames:v', '1', out],
|
| 77 |
+
capture_output=True)
|
| 78 |
+
return os.path.exists(out)
|
| 79 |
+
|
| 80 |
+
def dark_flat_neutralize(img_path, out_path, y_thresh=80, std_thresh=12, patch=8):
|
| 81 |
+
"""P3: pixels met Y<y_thresh en lokale_std<std_thresh -> R=G=B=Y (gray).
|
| 82 |
+
Pure numpy via sliding_window_view (numpy>=1.20). Lokale range als std-proxy.
|
| 83 |
+
"""
|
| 84 |
+
try:
|
| 85 |
+
from PIL import Image
|
| 86 |
+
except ImportError:
|
| 87 |
+
import shutil
|
| 88 |
+
shutil.copy(img_path, out_path)
|
| 89 |
+
return
|
| 90 |
+
from numpy.lib.stride_tricks import sliding_window_view
|
| 91 |
+
img = np.array(Image.open(img_path).convert('RGB'), dtype=np.float32)
|
| 92 |
+
Y = 0.299 * img[:, :, 0] + 0.587 * img[:, :, 1] + 0.114 * img[:, :, 2]
|
| 93 |
+
# Lokale range (max-min over patch) als proxy voor std
|
| 94 |
+
# Asymmetrische padding voor even patch-grootte: (k-1)/2 links, k/2 rechts
|
| 95 |
+
p0, p1 = patch // 2 - 1, patch // 2 # bijv. patch=8 -> (3,4)
|
| 96 |
+
Y_pad = np.pad(Y, ((p0, p1), (p0, p1)), mode='reflect')
|
| 97 |
+
# sliding_window_view(H+k-1, k) -> (H, k) per dimensie -> shape (H, W, patch, patch)
|
| 98 |
+
wins = sliding_window_view(Y_pad, (patch, patch))
|
| 99 |
+
local_range = wins.max(axis=(-1, -2)) - wins.min(axis=(-1, -2))
|
| 100 |
+
# Masker: donker EN vlak (range < 2*std_thresh ≈ 95e percentiel flat check)
|
| 101 |
+
mask = (Y < y_thresh) & (local_range < std_thresh * 2)
|
| 102 |
+
for c in range(3):
|
| 103 |
+
img[:, :, c] = np.where(mask, Y, img[:, :, c])
|
| 104 |
+
Image.fromarray(img.astype(np.uint8)).save(out_path)
|
| 105 |
+
|
| 106 |
+
def process_keyframe(kf_path):
|
| 107 |
+
"""Verwerk keyframe met P3 dark-flat neutralize. Returneer pad naar processed versie."""
|
| 108 |
+
fname = os.path.basename(kf_path)
|
| 109 |
+
out_path = f'/tmp/kf_proc/{fname}'
|
| 110 |
+
if not os.path.exists(out_path):
|
| 111 |
+
dark_flat_neutralize(kf_path, out_path)
|
| 112 |
+
return out_path
|
| 113 |
+
|
| 114 |
+
# ── Render loop ───────────────────────────────────────────────────────────────
|
| 115 |
+
prev_out = None
|
| 116 |
+
rendered = []
|
| 117 |
+
t_start = time.time()
|
| 118 |
+
|
| 119 |
+
for i, w in enumerate(manifest_all):
|
| 120 |
+
tw = time.time()
|
| 121 |
+
wi_num = int(w['out'].split('/w')[-1].split('.mp4')[0])
|
| 122 |
+
|
| 123 |
+
# Als dit venster al bestaat, skip (resume support)
|
| 124 |
+
if os.path.exists(w['out']) and os.path.getsize(w['out']) > 10000:
|
| 125 |
+
print(f'[{i+1}/{len(manifest_all)}] w{wi_num} al klaar, skip', flush=True)
|
| 126 |
+
prev_out = w['out']
|
| 127 |
+
rendered.append(w['out'])
|
| 128 |
+
continue
|
| 129 |
+
|
| 130 |
+
imgs = [] # (path, pos, weight)
|
| 131 |
+
|
| 132 |
+
# Carry-over: laatste frames van vorig venster
|
| 133 |
+
if prev_out and not w.get('cut_at_start'):
|
| 134 |
+
tf = total_frames(prev_out)
|
| 135 |
+
for ci in range(a.carry):
|
| 136 |
+
idx = tf - 1 - ci
|
| 137 |
+
cf = f'/tmp/carry/c{ci}.png'
|
| 138 |
+
if extract_frame(prev_out, idx, cf):
|
| 139 |
+
# pos 0 = laatste frame (weight 0.85), pos 1 = voorlaatste (0.65)
|
| 140 |
+
imgs.append((cf, ci, round(0.85 - ci * 0.20, 2)))
|
| 141 |
+
|
| 142 |
+
# Primaire keyframe (P3: dark-flat verwerkt)
|
| 143 |
+
kf_proc = process_keyframe(w['keyframe'])
|
| 144 |
+
imgs.append((kf_proc, w.get('kf_pos', 40), 1.0))
|
| 145 |
+
|
| 146 |
+
# Extra anchors voor mid-window scene cuts (P2 / P4)
|
| 147 |
+
for anchor in w.get('extra_anchors', []):
|
| 148 |
+
anc_proc = process_keyframe(anchor['path'])
|
| 149 |
+
imgs.append((anc_proc, anchor['pos'], anchor['weight']))
|
| 150 |
+
|
| 151 |
+
# Bouw CLI-commando
|
| 152 |
+
cmd = [
|
| 153 |
+
PY, '-m', 'ltx_pipelines.ic_lora',
|
| 154 |
+
'--distilled-checkpoint-path', CK,
|
| 155 |
+
'--spatial-upsampler-path', UP,
|
| 156 |
+
'--gemma-root', GEMMA,
|
| 157 |
+
'--lora', LORA, '0.85',
|
| 158 |
+
'--video-conditioning', w['gray'], '1.0',
|
| 159 |
+
'--width', '1920', '--height', '1088',
|
| 160 |
+
'--num-frames', '81',
|
| 161 |
+
'--frame-rate', '24',
|
| 162 |
+
'--seed', '42',
|
| 163 |
+
'--skip-stage-2', # P1: SeedVR2 post-hoc op RTX 5080
|
| 164 |
+
'--output-path', w['out'],
|
| 165 |
+
'--prompt', w['prompt'],
|
| 166 |
+
]
|
| 167 |
+
if a.offload_mode:
|
| 168 |
+
cmd += ['--offload-mode', a.offload_mode]
|
| 169 |
+
|
| 170 |
+
# Alle conditioning images (carry-over + keyframe + anchors)
|
| 171 |
+
for (p, pos, wt) in imgs:
|
| 172 |
+
cmd += ['--image', p, str(pos), str(wt)]
|
| 173 |
+
|
| 174 |
+
n_carry = len([x for x in imgs if x[1] < 2 and x[2] < 1.0])
|
| 175 |
+
n_anchors = len(w.get('extra_anchors', []))
|
| 176 |
+
scene_id = w.get('scene_id', '?')
|
| 177 |
+
print(f'[{i+1}/{len(manifest_all)}] w{wi_num} scene={scene_id} '
|
| 178 |
+
f'carry={n_carry} anchors={n_anchors} ...', flush=True)
|
| 179 |
+
|
| 180 |
+
r = subprocess.run(cmd, capture_output=True, text=True)
|
| 181 |
+
|
| 182 |
+
if not os.path.exists(w['out']):
|
| 183 |
+
print(f'FOUT venster w{wi_num}:\n{r.stderr[-600:]}', flush=True)
|
| 184 |
+
sys.exit(1)
|
| 185 |
+
|
| 186 |
+
elapsed = round(time.time() - tw)
|
| 187 |
+
total_elapsed = round(time.time() - t_start)
|
| 188 |
+
remaining = len(manifest_all) - i - 1
|
| 189 |
+
eta_s = remaining * elapsed
|
| 190 |
+
print(f'[{i+1}/{len(manifest_all)}] w{wi_num} klaar ({elapsed}s | '
|
| 191 |
+
f'ETA {eta_s//60}min {eta_s%60}s)', flush=True)
|
| 192 |
+
|
| 193 |
+
prev_out = w['out']
|
| 194 |
+
rendered.append(w['out'])
|
| 195 |
+
|
| 196 |
+
# ── Stitch ────────────────────────────────────────────────────────────────────
|
| 197 |
+
if len(rendered) > 1:
|
| 198 |
+
lst = '/workspace/stitch_v3.txt'
|
| 199 |
+
with open(lst, 'w') as f:
|
| 200 |
+
f.write('\n'.join("file '%s'" % p for p in rendered))
|
| 201 |
+
subprocess.run(
|
| 202 |
+
['ffmpeg', '-y', '-f', 'concat', '-safe', '0', '-i', lst,
|
| 203 |
+
'-c:v', 'libx264', '-crf', '18', '-pix_fmt', 'yuv420p', '-r', '30',
|
| 204 |
+
a.stitch_out],
|
| 205 |
+
capture_output=True)
|
| 206 |
+
total_time = round(time.time() - t_start)
|
| 207 |
+
print(f'STITCH_DONE -> {a.stitch_out} ({total_time//60}min {total_time%60}s totaal)',
|
| 208 |
+
flush=True)
|
| 209 |
+
elif len(rendered) == 1:
|
| 210 |
+
print(f'Enkel venster klaar: {rendered[0]}', flush=True)
|
| 211 |
+
|
| 212 |
+
print('ALL_DONE', flush=True)
|
mem_snap.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Quick CUDA memory snapshot after window 1 encode_video to find the 44GB holder."""
|
| 2 |
+
import sys, os, gc, json, pickle, gzip
|
| 3 |
+
sys.path.insert(0, '/workspace/LTX-2/packages/ltx-pipelines/src')
|
| 4 |
+
sys.path.insert(0, '/workspace/LTX-2/packages/ltx-core/src')
|
| 5 |
+
|
| 6 |
+
import torch
|
| 7 |
+
|
| 8 |
+
# Find all GPU tensors >= 1GB, print shape + data_ptr + storage_size
|
| 9 |
+
def dump_big_gpu_tensors(label):
|
| 10 |
+
print(f"\n=== {label} === VRAM={torch.cuda.memory_allocated()//1024**3}GB ===", flush=True)
|
| 11 |
+
big = []
|
| 12 |
+
for obj in gc.get_objects():
|
| 13 |
+
try:
|
| 14 |
+
if isinstance(obj, torch.Tensor) and obj.device.type == 'cuda':
|
| 15 |
+
gb = obj.untyped_storage().nbytes() / 1024**3
|
| 16 |
+
if gb > 1.0:
|
| 17 |
+
big.append((gb, obj.shape, hex(obj.data_ptr()), obj.dtype))
|
| 18 |
+
except Exception:
|
| 19 |
+
pass
|
| 20 |
+
big.sort(reverse=True)
|
| 21 |
+
total = sum(g for g, *_ in big)
|
| 22 |
+
print(f" {len(big)} tensors >= 1GB, total={total:.1f}GB", flush=True)
|
| 23 |
+
for gb, shape, ptr, dt in big[:10]:
|
| 24 |
+
print(f" {gb:.2f}GB {list(shape)} {dt} ptr={ptr}", flush=True)
|
| 25 |
+
return total
|
| 26 |
+
|
| 27 |
+
# Use torch's memory snapshot
|
| 28 |
+
def take_snapshot(path):
|
| 29 |
+
torch.cuda.synchronize()
|
| 30 |
+
snap = torch.cuda.memory._snapshot()
|
| 31 |
+
# find largest active segments
|
| 32 |
+
segments = snap.get('segments', [])
|
| 33 |
+
active = []
|
| 34 |
+
for seg in segments:
|
| 35 |
+
for blk in seg.get('blocks', []):
|
| 36 |
+
if blk.get('state') == 'active_allocated':
|
| 37 |
+
sz = blk.get('size', 0)
|
| 38 |
+
if sz > 500 * 1024**2: # > 500MB
|
| 39 |
+
trace = blk.get('frames', [])
|
| 40 |
+
trace_str = ' -> '.join(f"{f.get('name','?')}({f.get('filename','?')}:{f.get('line','?')})" for f in trace[-5:])
|
| 41 |
+
active.append((sz / 1024**3, trace_str))
|
| 42 |
+
active.sort(reverse=True)
|
| 43 |
+
print(f"\n=== SNAPSHOT {path}: {len(active)} blocks >= 500MB ===", flush=True)
|
| 44 |
+
for gb, trace in active[:20]:
|
| 45 |
+
print(f" {gb:.2f}GB | {trace}", flush=True)
|
| 46 |
+
|
vae_diag.py
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Diagnostic: what holds 45GB after window 1 encode_video?"""
|
| 2 |
+
import os, gc, sys, time
|
| 3 |
+
os.environ.setdefault('PYTORCH_ALLOC_CONF', 'expandable_segments:True')
|
| 4 |
+
os.environ.setdefault('PYTORCH_CUDA_ALLOC_CONF', 'expandable_segments:True')
|
| 5 |
+
import torch
|
| 6 |
+
|
| 7 |
+
sys.path.insert(0, '/workspace/LTX-2/packages/ltx-pipelines/src')
|
| 8 |
+
sys.path.insert(0, '/workspace/LTX-2/packages/ltx-core/src')
|
| 9 |
+
|
| 10 |
+
from ltx_pipelines.ic_lora import ICLoraPipeline
|
| 11 |
+
from ltx_pipelines.utils.args import ImageConditioningInput
|
| 12 |
+
from ltx_core.loader import LoraPathStrengthAndSDOps, LTXV_LORA_COMFY_RENAMING_MAP
|
| 13 |
+
from ltx_core.model.video_vae import TilingConfig, get_video_chunks_number
|
| 14 |
+
from ltx_pipelines.utils.media_io import encode_video
|
| 15 |
+
from ltx_pipelines.utils.types import OffloadMode
|
| 16 |
+
import optimum.quanto as oq
|
| 17 |
+
|
| 18 |
+
CK = '/workspace/models/LTX-2.3/ltx-2.3-22b-distilled.safetensors'
|
| 19 |
+
UP = '/workspace/models/LTX-2.3/ltx-2.3-spatial-upscaler-x2-1.1.safetensors'
|
| 20 |
+
LORA = '/workspace/models/loras/ltx-2.3-22b-ic-lora-colorization-0.9.safetensors'
|
| 21 |
+
GEMMA = '/workspace/models/LTX-2'
|
| 22 |
+
|
| 23 |
+
print("[DIAG] Pipeline laden...", flush=True)
|
| 24 |
+
pipe = ICLoraPipeline(
|
| 25 |
+
distilled_checkpoint_path=CK,
|
| 26 |
+
spatial_upsampler_path=UP,
|
| 27 |
+
gemma_root=GEMMA,
|
| 28 |
+
loras=(LoraPathStrengthAndSDOps(LORA, 1.0, LTXV_LORA_COMFY_RENAMING_MAP),),
|
| 29 |
+
quantization=None,
|
| 30 |
+
compilation_config=None,
|
| 31 |
+
offload_mode=OffloadMode('none'),
|
| 32 |
+
)
|
| 33 |
+
print(f"[DIAG] Pipeline geladen, VRAM={torch.cuda.memory_allocated()//1024**3}GB", flush=True)
|
| 34 |
+
|
| 35 |
+
# Prompt cache
|
| 36 |
+
with torch.no_grad():
|
| 37 |
+
_ctx = pipe.prompt_encoder(["Cinematic black and white silent film, high contrast"], enhance_first_prompt=False, enhance_prompt_seed=42)[0]
|
| 38 |
+
pipe.prompt_encoder = lambda prompts, **kw: [_ctx]
|
| 39 |
+
gc.collect(); torch.cuda.empty_cache()
|
| 40 |
+
print(f"[DIAG] Gemma freed, VRAM={torch.cuda.memory_allocated()//1024**3}GB", flush=True)
|
| 41 |
+
|
| 42 |
+
# fp8 DiT
|
| 43 |
+
from contextlib import contextmanager
|
| 44 |
+
stage = pipe.stage_1
|
| 45 |
+
_pre_built_dit = stage._build_transformer()
|
| 46 |
+
vram_bf16 = torch.cuda.memory_allocated() // 1024**3
|
| 47 |
+
oq.quantize(_pre_built_dit, weights=oq.qfloat8)
|
| 48 |
+
# Fix stale refs (TransformerArgsPreprocessor)
|
| 49 |
+
_vm = _pre_built_dit.velocity_model
|
| 50 |
+
_id_map = {}
|
| 51 |
+
for _a in dir(_vm):
|
| 52 |
+
if not _a.startswith('_'):
|
| 53 |
+
_o = getattr(_vm, _a, None)
|
| 54 |
+
if isinstance(_o, torch.nn.Linear):
|
| 55 |
+
_id_map[id(_o)] = _a
|
| 56 |
+
|
| 57 |
+
def _fix(obj, vm, id_map, depth=0):
|
| 58 |
+
if depth > 6: return
|
| 59 |
+
for k, v in list(getattr(obj, '__dict__', {}).items()):
|
| 60 |
+
if isinstance(v, torch.nn.Linear) and getattr(v, 'weight', True) is None:
|
| 61 |
+
a = id_map.get(id(v))
|
| 62 |
+
if a:
|
| 63 |
+
setattr(obj, k, getattr(vm, a, None))
|
| 64 |
+
elif not isinstance(v, (torch.nn.Module, torch.Tensor)) and hasattr(v, '__dict__'):
|
| 65 |
+
_fix(v, vm, id_map, depth+1)
|
| 66 |
+
|
| 67 |
+
for _p in [_vm.video_args_preprocessor, getattr(_vm, 'audio_args_preprocessor', None)]:
|
| 68 |
+
if _p: _fix(_p, _vm, _id_map)
|
| 69 |
+
oq.freeze(_pre_built_dit)
|
| 70 |
+
gc.collect(); torch.cuda.empty_cache()
|
| 71 |
+
vram_fp8 = torch.cuda.memory_allocated() // 1024**3
|
| 72 |
+
print(f"[DIAG] DiT fp8: {vram_fp8}GB (was bf16 {vram_bf16}GB)", flush=True)
|
| 73 |
+
|
| 74 |
+
@contextmanager
|
| 75 |
+
def _ctx_mgr(**kw):
|
| 76 |
+
yield _pre_built_dit
|
| 77 |
+
gc.collect(); torch.cuda.empty_cache()
|
| 78 |
+
|
| 79 |
+
stage._transformer_ctx = _ctx_mgr
|
| 80 |
+
pipe.stage_2._transformer_ctx = _ctx_mgr
|
| 81 |
+
|
| 82 |
+
# Tiled encode patch
|
| 83 |
+
import ltx_pipelines.iclora_utils as _icu
|
| 84 |
+
import ltx_pipelines.ic_lora as _icl
|
| 85 |
+
from ltx_core.model.video_vae.tiling import SpatialTilingConfig as _STC, TemporalTilingConfig as _TTC
|
| 86 |
+
_TILE = TilingConfig(spatial_config=_STC(512, 64), temporal_config=_TTC(80, 24))
|
| 87 |
+
_orig = _icu.append_ic_lora_reference_video_conditionings
|
| 88 |
+
_icu.append_ic_lora_reference_video_conditionings = lambda *a, tiling_config=None, **kw: _orig(*a, tiling_config=_TILE, **kw)
|
| 89 |
+
_icl.append_ic_lora_reference_video_conditionings = _icu.append_ic_lora_reference_video_conditionings
|
| 90 |
+
|
| 91 |
+
# Run window 0
|
| 92 |
+
import json
|
| 93 |
+
with open('/workspace/ltx_co_manifest.json') as f:
|
| 94 |
+
w = json.load(f)[0]
|
| 95 |
+
|
| 96 |
+
tiling = TilingConfig.default()
|
| 97 |
+
imgs = [ImageConditioningInput(path=w['keyframe'], frame_idx=w.get('kf_pos', 40), strength=1.0)]
|
| 98 |
+
print(f"[DIAG] Render venster 0...", flush=True)
|
| 99 |
+
with torch.no_grad():
|
| 100 |
+
video, audio = pipe(
|
| 101 |
+
prompt=w['prompt'], seed=42, height=1088, width=1920, num_frames=81, frame_rate=24,
|
| 102 |
+
images=imgs, video_conditioning=[(w['gray'], 1.0)], tiling_config=tiling,
|
| 103 |
+
conditioning_attention_strength=1.0, skip_stage_2=True, conditioning_attention_mask=None,
|
| 104 |
+
)
|
| 105 |
+
print(f"[DIAG] Pipe klaar, VRAM={torch.cuda.memory_allocated()//1024**3}GB", flush=True)
|
| 106 |
+
|
| 107 |
+
import os
|
| 108 |
+
os.makedirs(os.path.dirname(w['out']), exist_ok=True)
|
| 109 |
+
encode_video(video=video, fps=24, audio=audio, output_path=w['out'],
|
| 110 |
+
video_chunks_number=get_video_chunks_number(81, tiling))
|
| 111 |
+
print(f"[DIAG] encode_video klaar, VRAM={torch.cuda.memory_allocated()//1024**3}GB", flush=True)
|
| 112 |
+
|
| 113 |
+
del video, audio
|
| 114 |
+
gc.collect(); torch.cuda.empty_cache()
|
| 115 |
+
print(f"[DIAG] Na del+gc, VRAM={torch.cuda.memory_allocated()//1024**3}GB", flush=True)
|
| 116 |
+
|
| 117 |
+
# DIAGNOSTIEK: wat houdt CUDA memory?
|
| 118 |
+
print(f"\n[DIAG] === CUDA GEHEUGEN ANALYSE ===", flush=True)
|
| 119 |
+
print(f"allocated={torch.cuda.memory_allocated()//1024**3}GB reserved={torch.cuda.memory_reserved()//1024**3}GB", flush=True)
|
| 120 |
+
|
| 121 |
+
# Scan pipe.video_decoder
|
| 122 |
+
print("\n[DIAG] pipe.video_decoder module scan:", flush=True)
|
| 123 |
+
vd = pipe.video_decoder
|
| 124 |
+
total_vd = 0
|
| 125 |
+
for name, m in vd.named_modules():
|
| 126 |
+
# Parameters
|
| 127 |
+
p_sizes = [(n, p.numel()*p.element_size()//1024**2) for n,p in m.named_parameters(recurse=False) if p is not None and p.is_cuda]
|
| 128 |
+
b_sizes = [(n, b.numel()*b.element_size()//1024**2) for n,b in m.named_buffers(recurse=False) if b is not None and b.is_cuda]
|
| 129 |
+
# Also scan __dict__ for cached tensors
|
| 130 |
+
dict_sizes = []
|
| 131 |
+
for k, v in m.__dict__.items():
|
| 132 |
+
if isinstance(v, torch.Tensor) and v.is_cuda:
|
| 133 |
+
sz = v.numel() * v.element_size() // 1024**2
|
| 134 |
+
dict_sizes.append((k, sz))
|
| 135 |
+
elif isinstance(v, list):
|
| 136 |
+
for item in v:
|
| 137 |
+
if isinstance(item, torch.Tensor) and item.is_cuda:
|
| 138 |
+
sz = item.numel() * item.element_size() // 1024**2
|
| 139 |
+
dict_sizes.append((f'{k}[]', sz))
|
| 140 |
+
total_m = sum(s for _,s in p_sizes+b_sizes+dict_sizes)
|
| 141 |
+
if total_m > 100: # > 100MB
|
| 142 |
+
total_vd += total_m
|
| 143 |
+
print(f" {name or 'root'}: {total_m}MB", flush=True)
|
| 144 |
+
for n, s in p_sizes+b_sizes+dict_sizes:
|
| 145 |
+
if s > 10:
|
| 146 |
+
print(f" .{n}: {s}MB", flush=True)
|
| 147 |
+
|
| 148 |
+
print(f"\n[DIAG] Total in video_decoder: ~{total_vd}MB", flush=True)
|
| 149 |
+
|
| 150 |
+
# Scan pipe.stage_1 (NOT the DiT)
|
| 151 |
+
print("\n[DIAG] pipe.stage_1 non-DiT scan:", flush=True)
|
| 152 |
+
stage1 = pipe.stage_1
|
| 153 |
+
for attr in dir(stage1):
|
| 154 |
+
if attr.startswith('_'): continue
|
| 155 |
+
try:
|
| 156 |
+
v = getattr(stage1, attr)
|
| 157 |
+
if isinstance(v, torch.Tensor) and v.is_cuda:
|
| 158 |
+
print(f" stage_1.{attr}: {v.numel()*v.element_size()//1024**2}MB shape={list(v.shape)}", flush=True)
|
| 159 |
+
elif isinstance(v, torch.nn.Module):
|
| 160 |
+
sz = sum(p.numel()*p.element_size() for p in v.parameters() if p.is_cuda) // 1024**2
|
| 161 |
+
if sz > 100:
|
| 162 |
+
print(f" stage_1.{attr}: ~{sz}MB (nn.Module)", flush=True)
|
| 163 |
+
except Exception:
|
| 164 |
+
pass
|
| 165 |
+
|
| 166 |
+
print("\n[DIAG] KLAAR", flush=True)
|