{"id": "b4c9e2a7-3d6f-4a1c-8e5b-gmanski-ltxupscale", "revision": 0, "last_node_id": 36, "last_link_id": 48, "nodes": [{"id": 1, "type": "MarkdownNote", "pos": [-1700, -420], "size": [580, 760], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [], "properties": {"Node name for S&R": "MarkdownNote"}, "widgets_values": ["## Video Upscale LTX (Gmanski)\n\n**Sharpen an existing video with LTX-2.5's 2x latent upscale + refine pass.** Works on any video, not just this pod's own output — same idea as Image Upscale SeedVR2 (Gmanski), for video instead of stills.\n\n### Run it\n1. Upload the video to sharpen on **Load Video** below.\n2. Leave the prompt boxes at their defaults (a generic quality push) or edit them.\n3. Queue. Find the result under `output/Gmanski/video_upscale_ltx_00001.mp4` — original audio is carried through unchanged.\n\n### Frame-count requirement — read this first\nLTX-2.5 needs a frame count of **1 + a multiple of 8** (9, 17, 25, ... 73, ... 193, ...). This is a *different* rule from MiniMax H3's own 17n+5 constraint used elsewhere in this pod. An H3 clip generated at exactly 73 frames happens to satisfy both; most others (124, 192, 277 frames) do not. Queueing a video with the wrong frame count will error — trim it first if needed.\n\n### Honesty about what this is\nThis combination (encode a finished video into LTX's latent space, then run Lightricks' own upscale+refine pass on it) isn't something Lightricks' official example workflows demonstrate directly — their examples either generate from scratch or use an IC-LoRA guide, not this. It's a standard, architecturally sound technique (the upsampler doesn't care how its input latent was produced), but it's not independently verified the way most of this pod's MiniMax H3 work is. Try it and judge the result yourself before relying on it.\n\n**Not for MiniMax H3 output specifically**: the latent upscaler here is LTX-2.5's own — a different, incompatible latent space from MiniMax H3's. Checked directly against ComfyUI core's source; there is no H3-specific latent upscaler anywhere. For sharpening H3 output, use **Video Upscale ESRGAN (Gmanski)** instead (pixel-space, works on any video, much cheaper).\n\n### Likeness — the \"Refine sigmas\" node is the lever\n\nThe refine pass re-noises the footage and regenerates it; the **first sigma** is how much it throws away. The default is now **0.40** (was 0.85, which re-imagined faces on real footage — Lightricks' 0.85 is meant for refining a latent the same model just generated, where identity is already baked in). Measured against the source: 0.85 → 22.0 dB, 0.60 → 24.5, **0.40 → 24.7**, 0.25 → 24.6. Raise the first value toward 0.6 for more \"enhancement\" at the cost of fidelity; the 2x latent upsampler supplies the resolution either way. Keep the prompt neutral — it pulls the refine toward whatever it describes.\n\n### Long clips are trimmed to 73 frames — on purpose\n\nThe graph processes the **first 73 frames** of whatever you load (about 3 s at 24 fps) and trims the audio to match. Change the **\"Frames to process\"** node to do more, keeping it `1 + a multiple of 8` (81, 89, 97, 105, 113, 121 …). This exists because a 321-frame clip exhausted a 94 GB card *even with the resolution cap below* — after 20 minutes of loading models. Frames and pixels multiply and attention is quadratic, so 73 frames at the cap is the proven point on that card; the whole clip is not in reach in one pass. For a long clip, run it in chunks or use **Video Upscale ESRGAN (Gmanski)**, which has no such limit.\n\n### Resolution is capped at 1024 on the long edge — on purpose\n\nThe source is scaled so its longest edge is at most **1024** before the 2x upscale, giving a 2048-long-edge result. This is a memory budget, not a style choice: LTX attends over `frames x height x width` tokens, so doubling the resolution **quadruples** the token count and costs roughly **16x** in attention memory. Uncapped, a 1440x1152 clip became 2816x2304 and exhausted a 94 GB card outright — the 22B transformer got pushed entirely out of VRAM before sampling even started.\n\n**Resolution trades directly against frame count.** If you raise the cap (edit the two `ComfyMathExpression` nodes), shorten the clip to match. If a long clip OOMs, lower the cap rather than the frame count — it is the cheaper lever, since resolution costs quadratically and frames cost linearly.\n\n**Verified 2026-09-25** on an RTX PRO 6000 (94 GB): a **73-frame** 1120x1664 clip → capped to 704x1024 → **1408x2048** output, completed. A **321-frame** clip at the same source size OOMed with the cap in place — frames and pixels multiply, and attention is quadratic, so that is roughly 16x the memory of the 73-frame run. Treat ~73 frames at the 1024 cap as the known-good point on a 94 GB card and scale from there; longer clips need a lower cap. First run is dominated by loading ~40 GB of models (~13 min); ComfyUI caches node outputs, so re-runs with unchanged inputs are seconds.\n\n**What the refine pass does to your footage:** the 3-step pass *re-synthesises* fine detail rather than interpolating it. Side by side with a plain lanczos 2x, LTX resolves hair strands, jewellery edges and skin texture that lanczos smears — but faces drift slightly (lip and tooth shapes change). This is an upscale-*and-refine*, not a lossless enlarge. If identity has to survive exactly, use **Video Upscale ESRGAN (Gmanski)** instead.\n\n### Cost — read this before queueing\n- **Download**: ~40 GB (`ltx-video-refine` pack) — a completely separate model family from MiniMax H3, no shared base.\n- **VRAM**: 48 GB+ recommended.\n- **Time**: a 2x spatial upscale plus a 3-step refine pass on top of whatever it took to load a 22B-parameter model.\n\n### Safety\nThis produces a local file only. Review it yourself before sharing it anywhere.\n\n### Models\n`gmanski-packs install ltx-video-refine`.\n"], "title": "Read me: Video Upscale LTX (Gmanski)", "color": "#432", "bgcolor": "#653"}, {"id": 2, "type": "LoadVideo", "pos": [-1100, -420], "size": [320, 100], "flags": {}, "order": 1, "mode": 0, "inputs": [{"name": "file", "type": "COMBO", "link": null, "widget": {"name": "file"}}], "outputs": [{"name": "video", "type": "VIDEO", "links": [1]}], "properties": {"Node name for S&R": "LoadVideo"}, "widgets_values": ["", "image"], "title": "Load Video (the video to sharpen — click to upload)"}, {"id": 3, "type": "GetVideoComponents", "pos": [-720, -420], "size": [280, 130], "flags": {}, "order": 2, "mode": 0, "inputs": [{"name": "video", "type": "VIDEO", "link": 1}], "outputs": [{"name": "images", "type": "IMAGE", "links": [2]}, {"name": "audio", "type": "AUDIO", "links": [6]}, {"name": "fps", "type": "FLOAT", "links": [5, 26, 45]}, {"name": "bit_depth", "type": "COMBO", "links": []}, {"name": "color_space", "type": "COMBO", "links": []}], "properties": {"Node name for S&R": "GetVideoComponents"}, "widgets_values": [], "title": "Split into frames + audio + fps"}, {"id": 4, "type": "PrimitiveInt", "pos": [-1100, -280], "size": [320, 60], "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "value", "type": "INT", "link": null, "widget": {"name": "value"}}], "outputs": [{"name": "INT", "type": "INT", "links": [3, 4]}], "properties": {"Node name for S&R": "PrimitiveInt"}, "widgets_values": [73], "title": "Frames to process (73 proven on 94GB; keep it 1 + 8n)"}, {"id": 5, "type": "ImageFromBatch", "pos": [-720, -260], "size": [280, 90], "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 2}, {"name": "batch_index", "type": "INT", "link": null, "widget": {"name": "batch_index"}}, {"name": "length", "type": "INT", "link": 3, "widget": {"name": "length"}}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [14, 19]}], "properties": {"Node name for S&R": "ImageFromBatch"}, "widgets_values": [0, 73], "title": "Trim to N frames (memory budget)"}, {"id": 6, "type": "ComfyMathExpression", "pos": [-720, -150], "size": [280, 90], "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "values.a", "type": "FLOAT,INT,BOOLEAN", "link": 4}, {"name": "values.b", "type": "FLOAT,INT,BOOLEAN", "link": 5}], "outputs": [{"name": "FLOAT", "type": "FLOAT", "links": [7]}, {"name": "INT", "type": "INT", "links": []}, {"name": "BOOL", "type": "BOOLEAN", "links": []}], "properties": {"Node name for S&R": "ComfyMathExpression"}, "widgets_values": ["a / b"], "title": "Audio seconds = frames / source fps"}, {"id": 7, "type": "TrimAudioDuration", "pos": [-720, -40], "size": [280, 90], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "audio", "type": "AUDIO", "link": 6}, {"name": "start_index", "type": "FLOAT", "link": null, "widget": {"name": "start_index"}}, {"name": "duration", "type": "FLOAT", "link": 7, "widget": {"name": "duration"}}], "outputs": [{"name": "AUDIO", "type": "AUDIO", "links": [44]}], "properties": {"Node name for S&R": "TrimAudioDuration"}, "widgets_values": [0.0, 3.0], "title": "Trim audio to match the frames"}, {"id": 8, "type": "PrimitiveStringMultiline", "pos": [-1100, -260], "size": [320, 120], "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "value", "type": "STRING", "link": null, "widget": {"name": "value"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [9]}], "properties": {"Node name for S&R": "PrimitiveStringMultiline"}, "widgets_values": ["sharp, detailed, high quality, clean video"], "title": "Positive prompt"}, {"id": 9, "type": "PrimitiveStringMultiline", "pos": [-1100, -100], "size": [320, 120], "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "value", "type": "STRING", "link": null, "widget": {"name": "value"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [11]}], "properties": {"Node name for S&R": "PrimitiveStringMultiline"}, "widgets_values": ["blurry, low quality, artifacts, distorted, noisy"], "title": "Negative prompt"}, {"id": 10, "type": "UNETLoader", "pos": [-1100, 100], "size": [440, 90], "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "unet_name", "type": "COMBO", "link": null, "widget": {"name": "unet_name"}}, {"name": "weight_dtype", "type": "COMBO", "link": null, "widget": {"name": "weight_dtype"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [32]}], "properties": {"Node name for S&R": "UNETLoader", "models": [{"name": "ltx-2.5-22b-distilled-transformer-comfy-int8-convrot.safetensors", "url": "https://huggingface.co/Lightricks/LTX-2.5/resolve/main/diffusion_models/ltx-2.5-22b-distilled-transformer-comfy-int8-convrot.safetensors", "directory": "diffusion_models"}]}, "widgets_values": ["ltx-2.5-22b-distilled-transformer-comfy-int8-convrot.safetensors", "default"], "title": "LTX-2.5 distilled transformer"}, {"id": 11, "type": "CLIPLoader", "pos": [-1100, 220], "size": [440, 110], "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "clip_name", "type": "COMBO", "link": null, "widget": {"name": "clip_name"}}, {"name": "type", "type": "COMBO", "link": null, "widget": {"name": "type"}}, {"name": "device", "type": "COMBO", "link": null, "widget": {"name": "device"}}], "outputs": [{"name": "CLIP", "type": "CLIP", "links": [8, 10]}], "properties": {"Node name for S&R": "CLIPLoader", "models": [{"name": "gemma4-12b-with-proj-ltx-2.5-comfy-int8-convrot.safetensors", "url": "https://huggingface.co/Lightricks/LTX-2.5/resolve/main/text_encoders/gemma4-12b-with-proj-ltx-2.5-comfy-int8-convrot.safetensors", "directory": "text_encoders"}]}, "widgets_values": ["gemma4-12b-with-proj-ltx-2.5-comfy-int8-convrot.safetensors", "ltxv", "default"], "title": "LTX-2.5 text encoder"}, {"id": 12, "type": "VAELoader", "pos": [-1100, 360], "size": [440, 60], "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "vae_name", "type": "COMBO", "link": null, "widget": {"name": "vae_name"}}], "outputs": [{"name": "VAE", "type": "VAE", "links": [23, 29, 42]}], "properties": {"Node name for S&R": "VAELoader", "models": [{"name": "ltx-2.5-video-vae-bf16.safetensors", "url": "https://huggingface.co/Lightricks/LTX-2.5/resolve/main/vae/ltx-2.5-video-vae-bf16.safetensors", "directory": "vae"}]}, "widgets_values": ["ltx-2.5-video-vae-bf16.safetensors"], "title": "LTX-2.5 video VAE"}, {"id": 13, "type": "VAELoader", "pos": [-1100, 450], "size": [440, 60], "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "vae_name", "type": "COMBO", "link": null, "widget": {"name": "vae_name"}}], "outputs": [{"name": "VAE", "type": "VAE", "links": [24]}], "properties": {"Node name for S&R": "VAELoader", "models": [{"name": "ltx-2.5-audio-vae-bf16.safetensors", "url": "https://huggingface.co/Lightricks/LTX-2.5/resolve/main/vae/ltx-2.5-audio-vae-bf16.safetensors", "directory": "vae"}]}, "widgets_values": ["ltx-2.5-audio-vae-bf16.safetensors"], "title": "LTX-2.5 audio VAE (structural — see module docstring)"}, {"id": 14, "type": "LatentUpscaleModelLoader", "pos": [-1100, 540], "size": [440, 60], "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "model_name", "type": "COMBO", "link": null, "widget": {"name": "model_name"}}], "outputs": [{"name": "LATENT_UPSCALE_MODEL", "type": "LATENT_UPSCALE_MODEL", "links": [28]}], "properties": {"Node name for S&R": "LatentUpscaleModelLoader", "models": [{"name": "ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors", "url": "https://huggingface.co/Lightricks/LTX-2.5/resolve/main/latent_upscale_models/ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors", "directory": "latent_upscale_models"}]}, "widgets_values": ["ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors"], "title": "LTX-2.5 2x latent upscaler"}, {"id": 15, "type": "CLIPTextEncode", "pos": [-600, -260], "size": [380, 80], "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 8}, {"name": "text", "type": "STRING", "link": 9, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [12]}], "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": [""], "title": "Encode positive"}, {"id": 16, "type": "CLIPTextEncode", "pos": [-600, -100], "size": [380, 80], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 10}, {"name": "text", "type": "STRING", "link": 11, "widget": {"name": "text"}}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [13]}], "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": [""], "title": "Encode negative"}, {"id": 17, "type": "LTXVConditioning", "pos": [-200, -260], "size": [300, 100], "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "positive", "type": "CONDITIONING", "link": 12}, {"name": "negative", "type": "CONDITIONING", "link": 13}, {"name": "frame_rate", "type": "FLOAT", "link": null, "widget": {"name": "frame_rate"}}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [33]}, {"name": "negative", "type": "CONDITIONING", "links": [34]}], "properties": {"Node name for S&R": "LTXVConditioning"}, "widgets_values": [24], "title": "LTX conditioning"}, {"id": 18, "type": "GetImageSize", "pos": [-200, 60], "size": [280, 70], "flags": {}, "order": 17, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 14}], "outputs": [{"name": "width", "type": "INT", "links": [15, 17]}, {"name": "height", "type": "INT", "links": [16, 18]}, {"name": "batch_size", "type": "INT", "links": [25]}], "properties": {"Node name for S&R": "GetImageSize"}, "widgets_values": [], "title": "Source size + frame count"}, {"id": 19, "type": "ComfyMathExpression", "pos": [-620, 60], "size": [300, 110], "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "values.a", "type": "FLOAT,INT,BOOLEAN", "link": 15}, {"name": "values.b", "type": "FLOAT,INT,BOOLEAN", "link": 16}], "outputs": [{"name": "FLOAT", "type": "FLOAT", "links": []}, {"name": "INT", "type": "INT", "links": [20]}, {"name": "BOOL", "type": "BOOLEAN", "links": []}], "properties": {"Node name for S&R": "ComfyMathExpression"}, "widgets_values": ["max(64, int((a * 1024 / max(max(a, b), 1024) + 32) // 64) * 64)"], "title": "Width -> cap 1024, multiple of 64"}, {"id": 20, "type": "ComfyMathExpression", "pos": [-620, 190], "size": [300, 110], "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "values.a", "type": "FLOAT,INT,BOOLEAN", "link": 17}, {"name": "values.b", "type": "FLOAT,INT,BOOLEAN", "link": 18}], "outputs": [{"name": "FLOAT", "type": "FLOAT", "links": []}, {"name": "INT", "type": "INT", "links": [21]}, {"name": "BOOL", "type": "BOOLEAN", "links": []}], "properties": {"Node name for S&R": "ComfyMathExpression"}, "widgets_values": ["max(64, int((b * 1024 / max(max(a, b), 1024) + 32) // 64) * 64)"], "title": "Height -> cap 1024, multiple of 64"}, {"id": 21, "type": "ImageScale", "pos": [-620, 280], "size": [300, 130], "flags": {}, "order": 20, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 19}, {"name": "upscale_method", "type": "COMBO", "link": null, "widget": {"name": "upscale_method"}}, {"name": "width", "type": "INT", "link": 20, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 21, "widget": {"name": "height"}}, {"name": "crop", "type": "COMBO", "link": null, "widget": {"name": "crop"}}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [22]}], "properties": {"Node name for S&R": "ImageScale"}, "widgets_values": ["lanczos", 1440, 1152, "disabled"], "title": "Snap source to a 64-multiple (no-op if it already is)"}, {"id": 22, "type": "VAEEncode", "pos": [-200, -60], "size": [300, 60], "flags": {}, "order": 21, "mode": 0, "inputs": [{"name": "pixels", "type": "IMAGE", "link": 22}, {"name": "vae", "type": "VAE", "link": 23}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [27]}], "properties": {"Node name for S&R": "VAEEncode"}, "widgets_values": [], "title": "Encode source frames into LTX latent space"}, {"id": 23, "type": "LTXVEmptyLatentAudio", "pos": [-200, 160], "size": [300, 90], "flags": {}, "order": 22, "mode": 0, "inputs": [{"name": "audio_vae", "type": "VAE", "link": 24}, {"name": "frames_number", "type": "INT", "link": 25, "widget": {"name": "frames_number"}}, {"name": "frame_rate", "type": "FLOAT,INT", "link": 26, "widget": {"name": "frame_rate"}}], "outputs": [{"name": "Latent", "type": "LATENT", "links": [31]}], "properties": {"Node name for S&R": "LTXVEmptyLatentAudio"}, "widgets_values": [121, 24, 1], "title": "Silent audio latent (structural, never decoded)"}, {"id": 24, "type": "LTXVLatentUpsampler", "pos": [180, -60], "size": [300, 90], "flags": {}, "order": 23, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 27}, {"name": "upscale_model", "type": "LATENT_UPSCALE_MODEL", "link": 28}, {"name": "vae", "type": "VAE", "link": 29}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [30]}], "properties": {"Node name for S&R": "LTXVLatentUpsampler"}, "widgets_values": [], "title": "2x spatial latent upscale (video only - before AV concat)"}, {"id": 25, "type": "LTXVConcatAVLatent", "pos": [180, 200], "size": [300, 60], "flags": {}, "order": 24, "mode": 0, "inputs": [{"name": "video_latent", "type": "LATENT", "link": 30}, {"name": "audio_latent", "type": "LATENT", "link": 31}], "outputs": [{"name": "latent", "type": "LATENT", "links": [39]}], "properties": {"Node name for S&R": "LTXVConcatAVLatent"}, "widgets_values": [], "title": "Pack upscaled video + silent audio"}, {"id": 26, "type": "RandomNoise", "pos": [660, 100], "size": [290, 82], "flags": {}, "order": 25, "mode": 0, "inputs": [{"name": "noise_seed", "type": "INT", "link": null, "widget": {"name": "noise_seed"}}], "outputs": [{"name": "NOISE", "type": "NOISE", "links": [35]}], "properties": {"Node name for S&R": "RandomNoise"}, "widgets_values": [12345, "randomize"], "title": "Seed"}, {"id": 27, "type": "KSamplerSelect", "pos": [660, 200], "size": [290, 60], "flags": {}, "order": 26, "mode": 0, "inputs": [{"name": "sampler_name", "type": "COMBO", "link": null, "widget": {"name": "sampler_name"}}], "outputs": [{"name": "SAMPLER", "type": "SAMPLER", "links": [37]}], "properties": {"Node name for S&R": "KSamplerSelect"}, "widgets_values": ["euler_ancestral"], "title": "Sampler"}, {"id": 28, "type": "ManualSigmas", "pos": [660, 280], "size": [290, 60], "flags": {}, "order": 27, "mode": 0, "inputs": [], "outputs": [{"name": "SIGMAS", "type": "SIGMAS", "links": [38]}], "properties": {"Node name for S&R": "ManualSigmas"}, "widgets_values": ["0.40, 0.28, 0.14, 0.0"], "title": "Refine sigmas (partial denoise, not from-scratch)"}, {"id": 29, "type": "CFGGuider", "pos": [660, 360], "size": [290, 100], "flags": {}, "order": 28, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 32}, {"name": "positive", "type": "CONDITIONING", "link": 33}, {"name": "negative", "type": "CONDITIONING", "link": 34}, {"name": "cfg", "type": "FLOAT", "link": null, "widget": {"name": "cfg"}}], "outputs": [{"name": "GUIDER", "type": "GUIDER", "links": [36]}], "properties": {"Node name for S&R": "CFGGuider"}, "widgets_values": [1.0], "title": "Guider"}, {"id": 30, "type": "SamplerCustomAdvanced", "pos": [1020, 100], "size": [300, 200], "flags": {}, "order": 29, "mode": 0, "inputs": [{"name": "noise", "type": "NOISE", "link": 35}, {"name": "guider", "type": "GUIDER", "link": 36}, {"name": "sampler", "type": "SAMPLER", "link": 37}, {"name": "sigmas", "type": "SIGMAS", "link": 38}, {"name": "latent_image", "type": "LATENT", "link": 39}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [40]}], "properties": {"Node name for S&R": "SamplerCustomAdvanced"}, "widgets_values": [], "title": "Refine (3 steps)"}, {"id": 31, "type": "LTXVSeparateAVLatent", "pos": [1400, 100], "size": [300, 80], "flags": {}, "order": 30, "mode": 0, "inputs": [{"name": "av_latent", "type": "LATENT", "link": 40}], "outputs": [{"name": "video_latent", "type": "LATENT", "links": [41]}, {"name": "audio_latent", "type": "LATENT", "links": []}], "properties": {"Node name for S&R": "LTXVSeparateAVLatent"}, "widgets_values": [], "title": "Split back out (audio branch discarded)"}, {"id": 32, "type": "VAEDecodeTiled", "pos": [1400, 220], "size": [300, 170], "flags": {}, "order": 31, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 41}, {"name": "vae", "type": "VAE", "link": 42}, {"name": "tile_size", "type": "INT", "link": null, "widget": {"name": "tile_size"}}, {"name": "overlap", "type": "INT", "link": null, "widget": {"name": "overlap"}}, {"name": "temporal_size", "type": "INT", "link": null, "widget": {"name": "temporal_size"}}, {"name": "temporal_overlap", "type": "INT", "link": null, "widget": {"name": "temporal_overlap"}}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [43, 46]}], "properties": {"Node name for S&R": "VAEDecodeTiled"}, "widgets_values": [512, 64, 64, 8], "title": "Decode (tiled, for VRAM)"}, {"id": 33, "type": "CreateVideo", "pos": [1780, 100], "size": [280, 126], "flags": {}, "order": 32, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 43}, {"name": "audio", "type": "AUDIO", "link": 44}, {"name": "fps", "type": "FLOAT", "link": 45, "widget": {"name": "fps"}}, {"name": "bit_depth", "type": "COMBO", "link": null, "widget": {"name": "bit_depth"}}], "outputs": [{"name": "VIDEO", "type": "VIDEO", "links": [48]}], "properties": {"Node name for S&R": "CreateVideo"}, "widgets_values": [24, 8, "sRGB"], "title": "Join into a video (original audio, not LTX's)"}, {"id": 34, "type": "ImageFromBatch", "pos": [1780, 270], "size": [280, 90], "flags": {}, "order": 33, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 46}, {"name": "batch_index", "type": "INT", "link": null, "widget": {"name": "batch_index"}}, {"name": "length", "type": "INT", "link": null, "widget": {"name": "length"}}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [47]}], "properties": {"Node name for S&R": "ImageFromBatch"}, "widgets_values": [0, 1], "title": "First frame (for the thumbnail)"}, {"id": 35, "type": "SaveImage", "pos": [2100, 270], "size": [280, 60], "flags": {}, "order": 34, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 47}, {"name": "filename_prefix", "type": "STRING", "link": null, "widget": {"name": "filename_prefix"}}], "outputs": [], "properties": {"Node name for S&R": "SaveImage"}, "widgets_values": ["Gmanski/video_upscale_ltx_thumb"], "title": "Thumbnail PNG"}, {"id": 36, "type": "SaveVideo", "pos": [2100, 100], "size": [280, 200], "flags": {}, "order": 35, "mode": 0, "inputs": [{"name": "video", "type": "VIDEO", "link": 48}, {"name": "filename_prefix", "type": "STRING", "link": null, "widget": {"name": "filename_prefix"}}, {"name": "format", "type": "COMFY_DYNAMICCOMBO_V3", "link": null, "widget": {"name": "format"}}, {"name": "codec", "type": "COMFY_DYNAMICCOMBO_V3", "link": null, "widget": {"name": "codec"}}], "outputs": [], "properties": {"Node name for S&R": "SaveVideo"}, "widgets_values": ["Gmanski/video_upscale_ltx", "auto", "auto", "auto"], "title": "Save"}], "links": [[1, 2, 0, 3, 0, "VIDEO"], [2, 3, 0, 5, 0, "IMAGE"], [3, 4, 0, 5, 2, "INT"], [4, 4, 0, 6, 0, "INT"], [5, 3, 2, 6, 1, "FLOAT"], [6, 3, 1, 7, 0, "AUDIO"], [7, 6, 0, 7, 2, "FLOAT"], [8, 11, 0, 15, 0, "CLIP"], [9, 8, 0, 15, 1, "STRING"], [10, 11, 0, 16, 0, "CLIP"], [11, 9, 0, 16, 1, "STRING"], [12, 15, 0, 17, 0, "CONDITIONING"], [13, 16, 0, 17, 1, "CONDITIONING"], [14, 5, 0, 18, 0, "IMAGE"], [15, 18, 0, 19, 0, "INT"], [16, 18, 1, 19, 1, "INT"], [17, 18, 0, 20, 0, "INT"], [18, 18, 1, 20, 1, "INT"], [19, 5, 0, 21, 0, "IMAGE"], [20, 19, 1, 21, 2, "INT"], [21, 20, 1, 21, 3, "INT"], [22, 21, 0, 22, 0, "IMAGE"], [23, 12, 0, 22, 1, "VAE"], [24, 13, 0, 23, 0, "VAE"], [25, 18, 2, 23, 1, "INT"], [26, 3, 2, 23, 2, "FLOAT"], [27, 22, 0, 24, 0, "LATENT"], [28, 14, 0, 24, 1, "LATENT_UPSCALE_MODEL"], [29, 12, 0, 24, 2, "VAE"], [30, 24, 0, 25, 0, "LATENT"], [31, 23, 0, 25, 1, "LATENT"], [32, 10, 0, 29, 0, "MODEL"], [33, 17, 0, 29, 1, "CONDITIONING"], [34, 17, 1, 29, 2, "CONDITIONING"], [35, 26, 0, 30, 0, "NOISE"], [36, 29, 0, 30, 1, "GUIDER"], [37, 27, 0, 30, 2, "SAMPLER"], [38, 28, 0, 30, 3, "SIGMAS"], [39, 25, 0, 30, 4, "LATENT"], [40, 30, 0, 31, 0, "LATENT"], [41, 31, 0, 32, 0, "LATENT"], [42, 12, 0, 32, 1, "VAE"], [43, 32, 0, 33, 0, "IMAGE"], [44, 7, 0, 33, 1, "AUDIO"], [45, 3, 2, 33, 2, "FLOAT"], [46, 32, 0, 34, 0, "IMAGE"], [47, 34, 0, 35, 0, "IMAGE"], [48, 33, 0, 36, 0, "VIDEO"]], "groups": [], "config": {}, "extra": {"ds": {"scale": 0.62, "offset": [1480, 420]}, "gmanski_template": "video-upscale-ltx", "generator": "scripts/build_video_upscale_ltx_workflow.py", "source": "https://gmanski.com/workflows/video-upscale-ltx"}, "version": 0.4}