Love Bird · Season 10 · environment pipeline
The opening scout clip took 537 seconds of billed GPU to produce five seconds of video. That was never generation time — it was a 98 GB model download, repaid from scratch on every cold worker. This page puts the two candidate lanes side by side on the identical shot so the choice is made on measured numbers.
Composer environment 1ba70902, locked people-free master plate f6c6d570. Source is 2400×1792 — a 4:3 frame, resized proportionally to 1024×768. Never stretched, never relabelled.

endpoint hnyoo3d61e0npm · job 0158e528-…-u1 · worker ftr4nfse5o6cyc


ComfyUI 0.34.0 at 127.0.0.1:8189 · prompt 2f74d4d6 · $0.00


ComfyUI 0.34.0, prompt fb786c5d · seed 20260904 · $0.00


Cameron on the first local clip: “technically correct but there was sooo much artifacting, it looks like a watercolor painting.” He was right, the cause was measurable, and one rung up the ladder fixed it at no cost in time. The two lanes were never running the same model.
qbrv2h1yyf gives the exact call: LTX2VideoTransformer3DModel.from_pretrained(MODEL_DIR, subfolder="transformer_full", dtype=torch.bfloat16) — the full 37.98 GB transformer, bf16, not distilled. Every published LTX-2.5 GGUF, on every repo checked, is a quantisation of the distilled transformer. There is no GGUF of transformer_full anywhere. So the local clip carries two losses stacked, and Q2_K is the smallest rung that exists.
The ladder, with real file sizes, against 16,303 MiB of card and a free-VRAM figure that measured 7.38 GB when Q2_K was chosen and 15.65 GB later — it moves with whatever is open on the desktop.
| Quant | Size | Fits 16 GB? | Status |
|---|---|---|---|
| Q2_K | 7.33 GB | yes, easily | rendered — rejected, watercolour |
| Q3_K_S | 9.45 GB | yes | skipped |
| Q4_K_M | 12.22 GB | yes — 1.23 GB spills and streams | rendered — clean, 111.31 s |
| Q5_K_M | 14.83 GB | yes, barely | downloading — not a blocker |
| Q6_K | 17.61 GB | no — exceeds the card | needs block streaming |
| Q8_0 | 22.66 GB | no | needs block streaming |
| transformer_full bf16 what the cloud runs | 37.98 GB | no | structurally out of reach here |
enable_model_cpu_offload(), which holds the whole resident set in host memory and pages one module onto the GPU; that set is about 78.6 GB and the cloud host has 125 GB. This PC has 50.5 GB of RAM total, of which 13–14 GB was free. Full bf16 cannot be held here at all. An fp8 build would be roughly 19 GB of weights — still above the 16.3 GB card, so every step would stream blocks from RAM, and no fp8 LTX-2.5 build is published in a form ComfyUI loads. The only local path is the distilled GGUF ladder, so the whole question is where on that ladder Cameron’s eye stops. Q4_K_M and Q5_K_M are running on the identical prompt and seed; their last frames land here beside the cloud frame.
Both lanes had to pull the same weights. Measuring how long that took turned out to say more about where this work belongs than the clip quality did.
| Where | What moved | Throughput |
|---|---|---|
| RunPod → network volume | 74 GB of LTX-2.5 weights | ~1,213 MB/s 61.3 s |
| This PC, best stretch observed | GGUF chunk | 23 MB/s |
| This PC, text encoder average | 11.20 GB over 979 s | 11.4 MB/s |
| This PC, current | Q4_K_M chunk | 1.09 MB/s |
Every figure below is a RunPod account-balance delta between two reads, not a rate card. The balance lags by minutes, so each was re-read after the job settled.
| What ran | GPU | Billed wall | Cost |
|---|---|---|---|
| Volume probe (df / du / nvidia-smi on the mounted volume) | H200 143771 MiB | 101 s delay + 0.5 s exec | $0.1013 |
| Volume population attempt — killed mid-download by the spend governor | A100 80GB PCIe (pinned) | 44 s delay + 87 s exec | $0.0675 |
| Pod in CA-MTL-3 to inventory the volume over SSH (terminated on verify) | RTX PRO 6000 Blackwell SE 97887 MiB | ~9 min including boot | $0.1023 |
| THE BENCHMARK — one cold 1024×768 5.04 s clip from the locked plate | not reported by RunPod | 24.5 s delay + 494.0 s exec | $0.8590 |
| Total, balance 15.0014292356 → 13.8713307421 | — | — | $1.1301 |
The claim all along was that a persistent volume removes the model load. Here is the identical cmd:diag probe, run on a fresh worker before and after, answering the only two questions that matter.
| Probe on a fresh worker | setup_done | model_dir_exists | queue delay |
|---|---|---|---|
| Before — no volume, weights on container disk job f13ef831, 20 min after the benchmark | false | false | 23.2 s |
| After — 150 GB volume t4m75itxln mounted job on worker ha5clwe003x3a5 | true | true | 35.9 s |
pip install of torch and diffusers into a container that is thrown away every time — which is why the Python environment now lives on the volume too (8.8 GB beside the 74 GB of weights). The handler's marker short-circuits setup entirely, pip and download both, and the base image is bare python:3.11 — so caching the weights without caching the interpreter's packages would make every cold worker skip pip and then die on import torch. Half a cold start is not a cached start.
No module named 'diffusers' — because environment variables bake in at container start and that worker had been launched before PYTHONPATH was set. The boot script now derives the path from VOL instead, so two variables that must agree can no longer disagree. Then cannot import name 'CPUOffloadPolicy' from 'torch.distributed.fsdp' — the cu121 pin is torch 2.5.1 and the current diffusers needs 2.6+. That pin was defensive, added when a cu128 wheel hit "driver too old" on some hosts; this endpoint is pinned to A100/H100/H200, all of which run cu124. Moving the floor, not removing it. No warm number is published here until a clip actually renders.
Applied and read back on both video endpoints (hnyoo3d61e0npm, oio4nvfa96f1w0) on 2026-09-04.
| Setting | Before | After | Effect |
|---|---|---|---|
| networkVolumeId | "" (none) | uw4jfb1u80 | a cache exists at all |
| flashboot | true | true | already on; no change |
| idleTimeout | 600 / 300 s | 600 s | back-to-back clips stay warm |
| workersMax | 0 | 0 between runs, 1 during | no idle burn |
| template env VOL | /fermata_video_i2v_local | /runpod-volume/… | the actual fix |
VOL, which defaulted to a container-disk path. Three of the four approved settings were real but inert until the fifth was applied. That is the whole 444-second story.
uw4jfb1u80 already holds 57,266,506,468 bytes — 52 GB of it another agent's model set — leaving ~42.7 GB. The pruned LTX-2.5 set is 78.56 GB. It does not fit, and evicting someone else's 52 GB is not a decision this work gets to make. So the benchmark above measures the cold path honestly rather than pretending the cache is in place. A second volume, sized for the model, is the open decision.