Skip to content

feat(ui+perf): d3d11va decode, muted-cell audio skip, cohesive theme + slicker wizard/cells#23

Merged
tcconnally merged 2 commits into
mainfrom
feat/ui-polish-perf
Jul 4, 2026
Merged

feat(ui+perf): d3d11va decode, muted-cell audio skip, cohesive theme + slicker wizard/cells#23
tcconnally merged 2 commits into
mainfrom
feat/ui-polish-perf

Conversation

@tcconnally

Copy link
Copy Markdown
Owner

Slicker UI + measured decode performance

A UI-polish + performance pass on top of v10.0.0. Every perf change was A/B-measured on skyhawk (RTX 5070 Ti, 8-cell 2×2×2 wall) — no speculative tuning.

⚡ Performance

Decode path: nvdec-copyd3d11va (default). d3d11va decodes straight into the D3D11 textures the gpu-next/d3d11 renderer consumes — no surface copy-back to system RAM like nvdec-copy, and none of the CUDA↔D3D11 interop cost that made non-copy nvdec worse. HYPERWALL_HWDEC override retained as an escape hatch.

hwdec GPU mem CPU/24s power frame-drops
nvdec-copy (old) ~3.25 GB ~6 s ~49 W 0–1
nvdec (non-copy) ~1.9 GB ~28 s ~49 W 0
d3d11va (new) ~2.25 GB ~4–7 s ~46 W 0

The robust, repeatable win is ~30% less VRAM (two passes) at equal CPU/power/smoothness — directly easing the roadmap's memory-scaling concern for large grids. (CPU/RAM deltas beyond that were within content-variance noise, since clips are randomized per run; not claimed.)

Muted cells skip audio decode. The wall is muted by default; cells now load with aid=no, so the grid doesn't demux/decode audio it never plays. The track is lazily (re)selected on first unmute via _enable_audio_track() — no reload.

🎨 UI

  • hyperwall/theme.py — one source of truth: palette (keeps the on-brand #3b8edb accent shared with the web remote), typography, radii, a dialog QSS, and a Fusion dark QPalette so native chrome (message boxes, combos) matches. Pure strings, no Qt import at load → headless-test friendly.
  • Cell control bar — glassy translucent slab; borderless, rounded, quiet buttons that lift to the accent on hover/active; slimmer accent seek slider.
  • Title card → translucent pill with an accent spine. Startup shows a pulsing LOADING card that animates only before the first frame — never during steady playback (keeps the 24/7 idle cost at zero).
  • Setup wizard — themed, branded header, accent selection highlights, a live ROWS×COLS grid preview + "N cells / display" readout, and Enter-to-start.

Wizard (new)

(screenshot attached in comment)

✅ Validation

  • python tests/run_all.py85/85 green (added tests/test_theme.py for the pure helpers).
  • Rebuilt hyperwall.exe; launched on skyhawk: log confirms hwdec=d3d11va, NVIDIA profile current, G-Sync isolation intact, all cells play [DIRECT]/[TRANSCODE] with no Playback error / Stall / Crash-loop.
  • Cell UI + wizard visually verified via off-screen render + PrintWindow (content-free).

No behavior change to playback semantics, reliability chain, backends, or the web remote.

…+ slicker wizard/cells

Performance (measured on skyhawk, RTX 5070 Ti, 8-cell wall):
- Default hwdec nvdec-copy -> d3d11va. Decodes straight into the D3D11
  textures gpu-next/d3d11 renders, avoiding nvdec-copy's surface copy-back
  and non-copy nvdec's CUDA<->D3D11 interop cost. ~30% less VRAM
  (~3.2GB -> ~2.2GB) at equal CPU/power, zero frame drops across two A/B
  passes. HYPERWALL_HWDEC override retained as an escape hatch.
- Muted cells (the wall's default) load with aid=no, skipping audio
  demux/decode across the grid; the track is lazily (re)selected on first
  unmute via _enable_audio_track(), no reload needed.

UI:
- New hyperwall/theme.py: one source of truth for palette (on-brand #3b8edb
  accent), typography, radii + a dialog QSS and a Fusion dark QPalette. Pure
  strings, no Qt at import (headless-test friendly). app.py applies it.
- Cell control bar: glassy translucent slab, borderless rounded quiet
  buttons that lift to the accent on hover/checked, slimmer accent seek.
- Title card is a translucent pill with an accent spine; startup shows a
  pulsing LOADING card (animates only pre-first-frame, never during playback).
- Setup wizard: themed, branded header, accent selection highlights, a live
  ROWS x COLS grid preview + "N cells / display" readout, Enter-to-start.

Tests: add tests/test_theme.py (pure helpers); 85/85 suites green. Rebuilt
and validated on skyhawk: hwdec=d3d11va live, isolation intact, cells play
with no retry/escalation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tcconnally

Copy link
Copy Markdown
Owner Author

📸 Screenshots (couldn't inline-embed via gh CLI) are saved on skyhawk for review — drag them into this PR to embed:

  • Wizard: C:\Users\tccon\Downloads\hyperwall_wizard_new.png — branded HYPERWALL header + accent subtitle, themed DISPLAYS/SOURCES panels with accent selection, and the new LAYOUT row: themed spinboxes, live 2×2 grid preview, "4 cells / display" readout, INITIALIZE button.
  • Cell UI: C:\Users\tccon\Downloads\hyperwall_cell_ui_new.png — glass control bar with quiet rounded buttons (⭐ shown in its accent "checked" state), slim accent seek, and the title pill with the accent spine, over a black frame (content-free capture).

Force text-presentation (VS15) on the control glyphs so they render
monochrome and inherit the bar's tint, and switch only the favorite star
and trash bin to their color glyph (VS16) when active — so a favorited or
flagged cell pops at a glance while the bar stays quiet. Fav/trash also drop
the accent :checked fill (objectName override) so the colored glyph is the
sole active signal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tcconnally

Copy link
Copy Markdown
Owner Author

Added: monochrome control-bar icons, color only when active (commit ef360d6).

  • All transport/loop/mute glyphs forced to text-presentation (VS15) so they render monochrome and inherit the bar tint.
  • The favorite star lights up gold when the item is a favorite, and the trash bin turns red when flagged for deletion (VS16 color glyph) — reverting to monochrome when inactive. Fav/trash also drop the accent :checked fill so the colored glyph is the sole active signal.

Refreshed cell screenshot on skyhawk (favorite active = gold star, everything else monochrome): C:\Users\tccon\Downloads\hyperwall_cell_ui_new.png.

Verified: 85/85 tests green, rebuilt exe smoke-launched clean (hwdec=d3d11va, cells playing, no errors).

@tcconnally tcconnally merged commit 6114251 into main Jul 4, 2026
2 checks passed
@tcconnally tcconnally deleted the feat/ui-polish-perf branch July 4, 2026 16:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant