# Wan 2.2 TI2V 5B on remote RTX A5000 via Tailscale

Session-proven notes for running `ComfyUI-WanVideoWrapper` on a remote NVIDIA RTX A5000 Laptop GPU with 16 GB VRAM, controlled from Hermes over Tailscale.

## Recommended ComfyUI launch

Use normal dynamic VRAM mode, not `--lowvram`, for production tests:

```bash
cd ~/ai/ComfyUI
source .venv/bin/activate

TS_IP="$(tailscale ip -4 2>/dev/null | head -n1 || true)"
[ -z "$TS_IP" ] && TS_IP="127.0.0.1"

python main.py \
  --listen "$TS_IP" \
  --port 8188 \
  --reserve-vram 1.0
```

`--lowvram` is a crash/OOM diagnostic only. It can push T5/text encoding to CPU/offload, making T5 take ~45-65s while `nvidia-smi` shows low VRAM use. If jobs are slow and GPU looks idle, remove `--lowvram` before changing models.

Optional later speed test:

```bash
python main.py --listen "$TS_IP" --port 8188 --highvram --reserve-vram 1.0
```

Use `--highvram` only after normal mode is stable; it may OOM.

## Model files that worked

For Kijai `ComfyUI-WanVideoWrapper`:

- Diffusion model: `TI2V/Wan2_2-TI2V-5B_fp8_e4m3fn_scaled_KJ.safetensors`
- VAE: `Wan2_2_VAE_bf16.safetensors`
- Text encoder: `umt5-xxl-enc-fp8_e4m3fn.safetensors`

Important wrapper-specific incompatibility:

- Do **not** use `umt5_xxl_fp8_e4m3fn_scaled.safetensors` with `LoadWanVideoT5TextEncoder` in the Kijai wrapper. It failed with: `Invalid T5 text encoder model, fp8 scaled is not supported by this node`.
- That scaled T5 may be appropriate for native ComfyUI Wan workflows, but not this wrapper node.

## Download commands

```bash
cd ~/ai/ComfyUI
source .venv/bin/activate

mkdir -p models/diffusion_models/TI2V models/vae models/text_encoders

hf download Kijai/WanVideo_comfy_fp8_scaled \
  TI2V/Wan2_2-TI2V-5B_fp8_e4m3fn_scaled_KJ.safetensors \
  --local-dir ~/ai/ComfyUI/models/diffusion_models

hf download Kijai/WanVideo_comfy \
  Wan2_2_VAE_bf16.safetensors \
  --local-dir ~/ai/ComfyUI/models/vae

# Wrapper-compatible T5 if not already installed:
hf download Kijai/WanVideo_comfy \
  umt5-xxl-enc-fp8_e4m3fn.safetensors \
  --local-dir ~/ai/ComfyUI/models/text_encoders
```

## Stable 16 GB VRAM workflow profile

For first quality previews on A5000 16 GB:

- resolution: `416x736`
- frames: `25`
- fps: `12`
- steps: `12`
- sampler: `unipc`
- cfg: `3.5-4.0`
- model loader:
  - `model = TI2V/Wan2_2-TI2V-5B_fp8_e4m3fn_scaled_KJ.safetensors`
  - `quantization = fp8_e4m3fn_scaled`
  - `load_device = main_device`
- T5 loader:
  - `model_name = umt5-xxl-enc-fp8_e4m3fn.safetensors`
  - `load_device = main_device`
  - `quantization = disabled`
- text encode:
  - `device = gpu`
  - `use_disk_cache = true`
- sampler:
  - `force_offload = true` is safer for 16 GB with Wan2.2
- VAE decode:
  - `model_name = Wan2_2_VAE_bf16.safetensors`
  - `enable_vae_tiling = true`
  - `tile_x = 256`, `tile_y = 256`
  - `tile_stride_x = 128`, `tile_stride_y = 128`

Without VAE tiling, 416x736/25f/8 steps reached decode then failed with GPU OOM: allocated ~14.6 GiB and needed another ~455 MiB.

## A/B results vs Wan 2.1

Wan2.1 T2V 1.3B FP8 is useful for smoke tests and fast prompt iteration, but early outputs were often abstract/blinky at tiny settings and only moderately recognizable at 480x832.

Wan2.2 TI2V 5B FP8 scaled produced clearer object semantics and a usable B-roll candidate at 416x736 after prompt exposure was corrected.

Use:

- `Wan2.1 1.3B` = fast smoke / rough prompt testing
- `Wan2.2 TI2V 5B` = actual local AI-video B-roll candidate generation

## Prompting lesson

Dark cinematic prompts can underexpose Wan2.2. If output is too dark, explicitly request:

- `clearly visible`
- `bright overhead lights`
- `balanced exposure`
- `clean inspection garage`
- `full front three-quarter view`
- add negative terms: `dark underexposed image`, `black frame`, `unreadable silhouette`

For car B-roll, a brighter inspection-bay prompt was much more usable than a dim night-garage prompt.

## Operational checks

From Hermes/remote controller:

```bash
curl http://TAILSCALE_IP:8188/system_stats
curl http://TAILSCALE_IP:8188/object_info
```

Inspect `/object_info` before submitting long jobs to verify model names are visible in:

- `WanVideoModelLoader`
- `LoadWanVideoT5TextEncoder`
- `WanVideoVAELoader`

Use `/free` between failed runs if VRAM remains fragmented:

```python
POST /free {"unload_models": false, "free_memory": true}
```
