stack INSTALLED + tested (live batteries 2026-09-10 → 2026-09-12) · picks rationale + results below

Media Gen Roadmap

Evaluation of image / video / audio generation for this machine. The same constraints that shaped the LLM picks apply here — but media workloads invert the memory story: diffusion is bandwidth-bound rather than token-bound, so the 256 GB/s LPDDR5X (measured ~212 GB/s) is the ceiling, not the 124 GiB GTT pool. Full findings: research/mediagen-eval.md.

The one hardware fact that decides everything

Diffusion video/image generation is memory-bandwidth-bound. Measured community scaling on Wan 2.2 vs an RTX 3090 (936 GB/s): 320×320 lands at ~36% of the 3090, 512×512 at ~19%, 640×640 at ~11%. That collapse is an unresolved gfx1151 ROCm kernel inefficiency (TheRock #2591) on top of the raw bandwidth gap. Video works on this box; it is not fast, and it degrades hard above 640px.

The genuine hardware win is fit: no consumer NVIDIA card holds unquantized Wan 2.2 14B. This machine does — that's a batch-mode capability, not a speed one.

Selected picks — by modality

ModalityPickRuntimeFootprintExpected perfLicense
Images (daily)Z-Image-Turbo 6B, GGUF Q8 + Qwen3-4B encoderstable-diffusion.cpp v1.0.1 (Vulkan)~12 GB total~10 s/image (AMD-confirmed on Strix Halo)Apache 2.0 ✓
Images (text-heavy / edits)Qwen-Image-2512 20B, GGUF Q8ComfyUI + TheRock wheels~21 GB (Q8)~120–150 s/imageApache 2.0 ✓
Video (entry)Wan 2.2 TI2V-5B + Lightning LoRAComfyUIfits unquantized~8.5–9 min / 5 s 720p clipApache 2.0 ✓
Video (batch)Wan 2.2 14B + 4-step LightningComfyUI54–80 GB unquantized~30 min / 832×480 clipApache 2.0 ✓
TTSKokoro-82MCPU (no GPU needed)<1 GBfaster than real-time on CPUApache 2.0 ✓
Voice cloningChatterbox (v3 Multilingual)GPU~4–6 GB VRAMreal-time-ishMIT ✓ (PerTh watermark default-on)
STTwhisper large-v3-turbowhisper.cpp Vulkan~1.6 GB~26× real-time (Windows Vulkan datapoint)MIT ✓

Considered and excluded — with reasons

Co-residency rule vs the LLM pool

The 124 GiB GTT pool is already claimed by LLM serving (up to 96–113 GB resident). Only three media workloads are exempt from swap-out:

Everything else (Qwen-Image full precision, Wan 14B, Flux.2) requires unloading the served LLMs first. Rule: any media job >16 GB swaps the LLMs out and restores after. Treat video as an overnight batch mode, not an interactive one.

Install-order plan executed — phases 0–2 live, see test results below

  1. Phase 0 — zero risk, co-resident: whisper.cpp Vulkan build + large-v3-turbo; Kokoro CPU service. Verify with a 10-min transcription RTF and a 5-min narration render.
  2. Phase 1 — low risk: stable-diffusion.cpp v1.0.1 Vulkan build; Z-Image-Turbo GGUF Q8 (7.2 GB) + Qwen3-4B encoder. Bench target ~10 s/image.
  3. Phase 2 — medium complexity, LLM swap required: ComfyUI via the kyuz0 Fedora toolbox (closest match to Fedora 44); TheRock multi-arch wheels with [device-gfx1151] extras; the established env set (HSA_OVERRIDE_GFX_VERSION=11.5.1, HSA_ENABLE_SDMA=0, HSA_USE_SVM=0, --disable-mmap, attention_mode=sdpa, cudnn.enabled=false). Then Qwen-Image-2512 Q8 and Wan 2.2 TI2V-5B.
  4. Phase 3 — on demand: Chatterbox for voice cloning, watermark-on.

Biggest risk per modality

Upscaling (1080p+ from base models) — installed & verified 2026-09-10

ComfyUI 4x-UltraSharp (64 MB, models/upscale_models/) — verified live: took the blurry Z-Image 1280×720 output to 5120×2880 in under a minute through the ComfyUI API (LoadImage → UpscaleModelLoader → ImageUpscaleWithModel → SaveImage). This is the standard production path: generate at the model's native resolution, then neural-upscale — native 1080p generation from small models collapses, but upscaled output is sharp. RealESRGAN x4plus also staged. sd.cpp supports --upscale-model on the same files for the non-ComfyUI lane.

Live test results — 2026-09-10 (all 6 modalities PASS, co-resident with LLMs)

ModalityResultTimingVerification
Kokoro TTSPASS7.9s for 5.7s audio (RTF 1.40, CPU)wav + whisper cross-check
whisper STTPASS1.9s wallexact transcript of the TTS clip
Z-Image-Turbo (sd.cpp)PASS33.6s incl. model load, 512pximage visually inspected
Chatterbox voice clonePASS60.3s for 6.8s audio (GPU-contended run)clone transcribed back, exact match
Qwen-Image-2512 (ComfyUI)PASS163.5s, 6.5 s/it @ 512pximage visually inspected
Wan 2.2 TI2V-5B videoPASS47s for 20 steps @ 320p/25f (2.3 s/it)frame visually inspected

All ran co-resident with the served LLMs — llama-swap never stopped. Wan at small resolution ran 4× better than the eval doc's 720p projections. Wiring added: ComfyUI-GGUF custom node, gguf dep, extra_model_paths.yaml, model symlinks. Known gap: espeak-ng (installed 2026-09-10) was missing during the test — Kokoro skipped out-of-vocabulary words; fixed after. Full repro: research/mediagen-live-tests.md.

Full-resolution video battery · 2026-09-11 · complete

Hi-res battery on sd.cpp vid_gen (Vulkan/RADV), creative prompts, GPU decode, 27B LLM evicted during renders (unified-memory headroom). LTX-2.3 dev Q8_0 (21 GB), distilled Q4, and Wan 2.2 TI2V-5B.

LaneResultTimingVerification
LTX-2.3 dev Q8_0 · 1280×736/33fPASS921 s wall (sampling 764 s, GPU VAE decode 137 s)webm + md5, EBML matches reference
LTX-2.3 dev Q8_0 · 1920×1088/33f headlinePASS1865 s wall (sampling 1806 s, video VAE decode 50.7 s, audio 1.0 s)webm 9.3 MB + md5; frames 5/16/27 visually inspected — on-prompt, stylized look, one minor temporal artifact
Wan 2.2 TI2V-5B · 1280×704/33fPASS21.7 min wall (~21 s/it — fastest video model on the box)valid EBML, command recorded
LTX-2.3 · 121-frame clips (any resolution)BLOCKED—two hard memory walls: 1920×1088 pinned alloc exceeds RADV maxBufferSize at graph build; 720p OOM-killed in decode (~76 GB RSS). Upstream item: tiled/multi-segment video-VAE decode.

Daily-driver video pipeline (operator pick, 2026-09-11): Wan 2.2 A14B + Lightning LoRA — 4 steps (2 high + 2 low), cfg 1.0, 832×480/33f: sampling 287.6 s (~4.8 min) vs the 5B's 418.5 s — the bigger model is also the faster one, and visibly more photoreal (fur micro-texture, true bokeh; the 5B control came out stylized/washed at 20 steps). Wall 8:42 incl. decode. Honest caveats: 14B caps at 832×480 on this box; cfg 1.0 means the negative prompt is structurally inert (official Lightning recipe); LoRA's I64 alpha scalars required an F32 rewrite for sd.cpp (fix documented). A/B log: research/wan-lightning-ab.md.

Reliable ceiling (LTX path): 1920×1088 / 33 f / 24 fps (~1.4 s clips), zero workarounds, GPU decode. During debugging a regression was root-caused to the amdgpu.lockup_timeout=600 kernel param (it hung every large video-VAE decode on RADV/gfx1151); it was removed — do not re-add it to this box's cmdline. Full evidence trail (6 rounds): research/gfx1151-sdcpp-ltx-debug.md.

Photoreal image battery · 2026-09-11 · complete

SDXL-class photoreal models (uncensored-permissive tier) via sd.cpp, shared SDXL components (clip_l + clip_g + VAE), euler, 28–30 steps, cfg 6–6.5, FA. Outputs delivered to the operator's Telegram — not published on this site (governance: uncensored-tier outputs stay off the live docs).

ModelResultTimingVerification
Juggernaut XL v9 Q8_0PASS ×255.4 s @ 1024², 58.2 s @ 1216×832both images visually inspected — cinematic/saturated look, zero artifacts
RealVisXL v5.0 Q8_0PASS ×254.5 s @ 1024², 58.3 s @ 1216×832visually inspected — most photoreal of the two (true skin texture, pore-level detail)

~55 s per 1080p-class image, both models production-usable, no upscale required. ~1.6 s/it, resolution-insensitive in this range. Known non-fatals: recurring Vulkan pinned-mem alloc warning during VAE decode (decodes fine, 8–10 s) and an auto-fit "no GPU devices" warning on some runs (renders still execute on Vulkan). Battery log: research/uncensored-battery.md.

Uncensored-capability proof · 2026-09-11 · proved

Capability test of the uncensored-permissive tier: renders of prompt classes that filtered services block, judged on coherence (uncensored models don't refuse — the claim is that anatomy/structure hold where filtered-trained models mangle). Outputs delivered to the operator's Telegram only, per governance — verdicts only here.

Prompt classVerdictEvidence
Fine-art nude figure study (adults)PROVED both modelscorrect limb count, plausible hands, natural anatomy — the class where filtered models visibly fail
Horror / practical-effects creaturePROVED — strongest classfully coherent
Action violence (injury detail)coherent, mutedrenders fully without degradation, but injury detail subtle at tested settings — "renders coherently", not "graphic"

Operational finding: both models self-interpret toward modesty unless the prompt explicitly names the fine-art nude tradition — precise prompting is required. Test surface, hard lines: adults only, no real-person likeness, no non-consent framing. Log: research/uncensored-proof.md.