FishWave is a Windows media player built around libmpv, WPF, F#, and ILGPU. It keeps the direct feel of classic desktop players while exposing the hardware path underneath: decode mode, GPU compute state, CPU SIMD mode, sensors, shader options, and fallback behavior.
FishWave is for people who still like real desktop software: open a file, right-click for a serious menu, tune the video pipeline, inspect what the machine is doing, and get back to watching.
Get the latest packaged build from GitHub Releases.
The download counters above are live GitHub release-download badges. They count files attached to releases, not workflow artifacts.
- Embedded MPV playback inside a WPF desktop shell.
- Local files, folders, discs, clipboard URLs, web URLs, subtitles, screenshots, playlists, speed controls, and audio-track controls.
- Native Win32-style context menu through
menu.dllanddyn_menu.lua. - Portable MPV configuration with scripts, shader presets, subtitle styling, and input mappings.
- WebView2 fallback for problem streams or hostile decode paths.
- Hardware diagnostics for MPV, ILGPU, LibreHardwareMonitor, and CPU SIMD mode.
- Hardware decoder options:
auto,auto-copy,d3d11va,d3d11va-copy,vulkan, andvulkan-copy. - High-quality upscaling with
scale=ewa_lanczossharpandcscale=spline36. - Toggleable motion interpolation and hardware debanding.
- GLSL shader library with ArtCNN, FSRCNNX, RAVU, FSR, adaptive sharpen, and CRT-style post-processing.
FishWave uses ILGPU for analysis and telemetry workloads:
- audio RMS
- letterbox detection
- scene comparison
- grayscale conversion
- Sobel edge detection
- sharpening
The runtime report includes the selected accelerator, CPU fallback state, global memory, warp size, kernel counts, buffer cache sizes, and average kernel latency. LibreHardwareMonitor adds CPU, GPU, memory, and storage sensors where the local machine exposes them.
FishWave also includes FSharpCompiler CPU SIMD controls: Auto, Scalar, SIMD, AVX2, and AVX-512.
| Layer | Project | Role |
|---|---|---|
| UI shell | FishWave |
WPF window, controls, preferences, diagnostics, MPV host |
| MPV bridge | FSharpCompiler |
F# P/Invoke wrapper around libmpv-2.dll, playback properties, CPU SIMD helpers |
| GPU engine | FishWave.Gpu |
ILGPU accelerator selection, kernels, persistent buffers, telemetry |
For the detailed design, see ARCHITECTURE.MD.
- Windows 10/11 x64
- .NET 8 SDK for development
- WebView2 runtime for fallback playback
- GPU supported by MPV/ILGPU recommended
- AVX2 or AVX-512 CPU support optional
FishWave can run without the ideal hardware path. It reports what it selected and falls back where possible.
Open FishWave.sln in Visual Studio or Rider, then build and run the FishWave project.
Command line:
dotnet restore FishWave.sln
dotnet build FishWave\FishWave.csprojFor a build that uses already-restored packages:
dotnet build FishWave\FishWave.csproj --no-restoreThe GitHub workflow builds the WPF app and creates an MSI artifact with WiX. The current package metadata is versioned as FishWave 9.0.0.
Local installer files:
FishWave_Installer.issfor the Inno Setup package.Installer/FishWave.wxsfor the WiX MSI package.
- Open file: toolbar folder button or
Media > Open File. - Open URL: toolbar globe button or
Media > Open URL. - Dynamic MPV menu: right-click the video area.
- Preferences:
Help > Preferences. - Hardware diagnostics: developer-board button in the bottom toolbar.
- Stats overlay: info button or
Tools > Statisticsfrom the context menu.
The preferences window applies changes immediately and saves them to local app data. It currently controls:
- hardware acceleration
- hardware decoder
- Lanczos upscaling
- motion interpolation
- debanding
- FSharpCompiler CPU SIMD mode
- CPU SIMD telemetry overlay
Cancel restores the settings captured when the dialog opened.
FishWave reports GPU pipeline status from ILGPU runtime telemetry:
STABLE: a non-CPU accelerator is selected and average kernel latency is at or below the current threshold.CRITICAL: a non-CPU accelerator is selected, but average kernel latency is above the threshold.CPU-FALLBACK: ILGPU selected CPU execution instead of a GPU.
Sensor temperatures, clocks, fan speeds, and loads come from LibreHardwareMonitor and are shown separately in the diagnostic report.
FishWave/
MainWindow.xaml(.cs) WPF shell and player controls
Services/ playback service, HWND host, diagnostics
portable_config/ MPV scripts, input config, shaders, script options
FSharpCompiler/
fish#.fs MPV API bridge and CPU SIMD helpers
fishwave.gpu/
DeviceManager.fs ILGPU context and accelerator selection
Kernels.fs GPU kernels
ComputeBridge.fs buffer reuse, kernel launchers, telemetry
images/
main.png README screenshot
- YouTube or web URL playback depends on the bundled/configured YTDL path and can fail under VPNs or when upstream site behavior changes.
- Some LibreHardwareMonitor sensors may be missing without driver support or elevated access.
- The native context menu depends on
portable_config/scripts/menu.dllanddyn_menu.lua.
FishWave 9 is an active experimental player. The core playback path is usable, and the current focus is making the hardware pipeline more transparent, stable, and easy to tune.
