Skip to content

skonester/FishWave

Repository files navigation

FishWave

Latest release Total release downloads Latest release downloads Build License

FishWave player screenshot

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.

Download

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.

Highlights

  • 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.dll and dyn_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.

Video Pipeline

  • Hardware decoder options: auto, auto-copy, d3d11va, d3d11va-copy, vulkan, and vulkan-copy.
  • High-quality upscaling with scale=ewa_lanczossharp and cscale=spline36.
  • Toggleable motion interpolation and hardware debanding.
  • GLSL shader library with ArtCNN, FSRCNNX, RAVU, FSR, adaptive sharpen, and CRT-style post-processing.

Compute And Diagnostics

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.

Architecture

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.

Requirements

  • 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.

Build From Source

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.csproj

For a build that uses already-restored packages:

dotnet build FishWave\FishWave.csproj --no-restore

Packaging

The 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.iss for the Inno Setup package.
  • Installer/FishWave.wxs for the WiX MSI package.

Using The App

  • 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 > Statistics from the context menu.

Preferences

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.

Hardware Status

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.

Repository Layout

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

Known Notes

  • 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.dll and dyn_menu.lua.

Status

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.

About

a MPV wrapper media player with WPF

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors