Flyleaf: a Windows media player engine you can host in your own app
Media Player .NET Library for WinUI 3/ WPF/WinForms (based on FFmpeg/DirectX)
At a glance
- What is it?
- Flyleaf is a .NET media player library for WinUI 3, WPF and WinForms, built on FFmpeg with DirectX video acceleration, HDR support, and plugins for subtitles, torrents and web media. It ships a hosting control so a developer can put a full player inside their own application rather than shipping a player binary.
- Who is it for?
- Flyleaf suits a Windows developer who needs to play video inside their own application, whether that is a media browser, an editor or a device interface, and who wants the FFmpeg format coverage and the DirectX video path without wiring that themselves. It does not suit a cross-platform team, since the UI and acceleration layers are Windows specific, and it does not suit anyone who wants a ready-made player application rather than a library.
- Can I use it commercially?
- Yes, with conditions. LGPL-3.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A player engine rather than a player application
Flyleaf is described as a Media Player .NET Library for WinUI 3, WPF and WinForms, based on FFmpeg and DirectX, and the project description in the repository is a media player .NET library.
The distinction between a library and an application matters here, because it determines what you are actually getting. You are not installing a player. You are adding a playback engine to a .NET application, with a hosting control that renders the video surface inside your own window.
The feature list sets the scope. It plays everything, across audio, video, images and playlists over any protocol, extending FFmpeg's supported protocols and formats with additional plugins such as YoutubeDL and TorrentBitSwarm, and it accepts custom I/O streams and plugins to handle non-standard protocols and formats. On top of that it offers capture devices, where the format, input and options are passed with a single URL such as a desktop capture expression, and it supports FFmpeg v9.0 with an updated ABI package if your project needs it.
The repository layout matches that structure. There is FlyleafLib/ for the core library, FlyleafLib.Controls.WPF/ and FlyleafLib.Controls.WinUI/ for the UI layers, a Plugins/ directory, a Samples/ directory with eight sample applications, Tests/, an FFmpeg/ folder, and FlyleafLib.sln as the solution file.
FlyleafHost for the surface, FlyleafME for the controls
The UI is split into two pieces, and the split maps onto how applications are actually built.
FlyleafHost is the surface. The README describes it as a DPI aware, hardware accelerated Direct3D Surface which can be hosted as a normal control in your application, and which lets you develop your own transparent overlay content above it. It carries the window management features: attach and detach, activity and idle mode, drag move for self or owner windows, drag and drop swap, drag and drop open, full and normal screen, resize and resize keeping ratio, and z-order.
FlyleafME is the ready-made control set, and it is WPF only. It provides the Flyleaf bar control and slider, the popup menu, the settings dialog, colour themes based on Material Design in XAML, and style and control template customisation. WinForms support is described as partial in the README, and the samples folder shows what exists in practice: a WinForms custom player, a WinForms downloader, a WinForms extractor, a WPF control player, a WPF custom MVVM player, a WPF rounded corners player, a WinUI player and a custom WinForms audio player.
The architectural point for a developer is that the implementation uses UI notifications, PropertyChanged and ObservableCollection among others, so you can use it as a ViewModel directly. That is a deliberate choice to make the library usable from a model-view-viewmodel application without an adapter layer.
The FFmpeg and DirectX path, including HDR
The performance claim in the README is specific about how it was reached: coded from scratch to gain the best possible performance with FFmpeg and DirectX using video acceleration and custom pixel shaders, with a threading implementation with efficient cancellation which allows fast open, play, pause, stop, seek and stream switching.
The video feature list shows where the effort went. There is HDR10, HDR10+, HLG and Dolby Vision support with the FlyleafVP renderer, deinterlacing with double rate on the D3D11 video processor path, embedded ICC profiles, a Super Resolution option for Nvidia and Intel hardware on the D3D11VP path, and a 360 degree panoramic mode. There is also zero-copy with crops done in the vertex shader, split-frame and alpha packing described as a special technique to support alpha with hardware acceleration, and VSync.
Three different video processors are listed: FlyleafVP, D3D11VP and SwsScale. The distinction is not cosmetic. The features that need the GPU, such as Dolby Vision and Super Resolution, are marked as available only on FlyleafVP or only on D3D11VP, so a project that has to support a range of hardware has to decide which processor to use and which features to drop on the machines that cannot run them.
The FFmpeg integration itself has a specific detail worth knowing. The README notes the library is patched for .NET issues and advises using the recommended FFmpeg libraries found in the GitHub releases, so the native binaries are shipped alongside the managed library rather than expected from the system.
Plugins turn it into a downloader and a web player
Four plugins are named, and each one extends the library past local files.
OpenSubtitlesOrg searches and downloads subtitles online. SubtitlesConverter detects the character set of an input and converts it to UTF-8, which pairs naturally with the subtitle support listed under the playback features, including bitmap subtitles and language priority using the system's default languages. TorrentBitSwarm plays media from a torrent without the need to download it completely. YoutubeDL plays web media that are not accessible directly with HTTP or HTTPS.
That last pair is what turns the library into something you can point at a stream catalogue rather than a file on disk, and it is why the library is not simply a wrapper around a file player.
The library is also usable for things other than playback. The README lists an audio player mode that can be used as an audio player only without the need of a UI control, a downloader and remuxer mode, and an extractor mode for pulling video frames out, with support for stepping by a number of frames. The samples directory reflects exactly that: a FlyleafAudioPlayer, a FlyleafDownloader and a FlyleafExtractor, each in its own WinForms application.
For the WPF UI, the README credits Dragablz for the window and tab behaviour and MaterialDesign Colors and Themes for the Material Design in XAML look, both open source components the project builds on.
Getting the library: NuGet, samples and the wiki
The distribution is split three ways, and the README states it at the top.
FlyleafLib releases go to NuGet, the library packages published under the flyleaf name. Compiled samples are on GitHub releases. And the documentation is on the wiki, with the samples also present in the solution under Samples.
That split is worth understanding before you start. The NuGet packages are the thing you reference from your project, the GitHub releases carry the sample applications and, according to the FFmpeg note, the recommended FFmpeg binaries you are expected to use, and the wiki holds the API documentation that the README does not.
The wiki page linked for defaults is the one on Player key and mouse bindings, and the README says all the implementation supports customizable mouse and key bindings which can be assigned to an embedded or a custom action. That page is the practical starting point, because a player whose bindings you cannot set is a player you will fight.
The solution file also carries a Tests/ project, and the top level has an .editorconfig alongside Directory.Build.targets, which is where shared build properties live for a multi-project solution of this size.
Release cadence and the LGPL terms
The repository is not archived and the last push was on 2026-10-18, two days before this review. The release list shows v3.11.12 on 2026-10-16, v3.11.11 on 2026-09-25 and v3.11.9 on 2026-09-22, each tagged with the .NET and FFmpeg versions it targets, for example Flyleaf v3.11.12 with AIO x64 .NET10 and FFmpeg v9.
Those tags tell you something important about the upgrade path. The library is versioned together with the runtime it targets and the native FFmpeg it ships, so an upgrade is not a drop-in replacement of a DLL. Moving to a new Flyleaf release means moving to a specific .NET version and a specific FFmpeg build, and the FFmpeg v9.0 support line explicitly notes that you should use the updated Flyleaf.FFmpeg.ABI at your project if required.
That is a real operational cost, and it is the price of a library that keeps its native layer current rather than freezing it.
On licensing, the licence field says LGPL-3.0. The LGPL is the weak copyleft variant, and for a library it is chosen precisely so that an application linking against it does not have to become LGPL itself, while modifications to the library itself stay open. The licence file is LICENSE.txt at the root of the tree.
One caveat for anyone shipping this: the project bundles FFmpeg, and FFmpeg has its own licence terms, which may include the patent encumbrances that come with the H.264 and HEVC codecs it ships. Those obligations attach to the FFmpeg build you redistribute, not to Flyleaf itself, and they are the part to check before shipping a player to users.
Editorial conclusion
Flyleaf suits a Windows developer who needs to play video inside their own application, whether that is a media browser, an editor or a device interface, and who wants the FFmpeg format coverage and the DirectX video path without wiring that themselves. It does not suit a cross-platform team, since the UI and acceleration layers are Windows specific, and it does not suit anyone who wants a ready-made player application rather than a library. Before adopting, install the FlyleafLib package from NuGet, build one of the Samples projects against it, and confirm on your own hardware that the HDR and video acceleration paths behave as the feature list claims, because those depend on the GPU and the FFmpeg build you ship.
Frequently asked questions
What is Flyleaf and which frameworks does it support?
Flyleaf is a media player .NET library for WinUI 3, WPF and WinForms, based on FFmpeg and DirectX. It plays audio, video, images and playlists over any protocol and extends FFmpeg's protocols with plugins such as YoutubeDL and TorrentBitSwarm.
How do I add Flyleaf to my .NET project?
The library releases are published on NuGet under the flyleaf name, and the README states that FlyleafLib releases will be on NuGet. Compiled samples are on GitHub releases and the documentation is on the repository wiki.
What is the difference between FlyleafHost and FlyleafME?
FlyleafHost is the DPI aware, hardware accelerated Direct3D surface you can host as a normal control in your application and build your own overlay above. FlyleafME is the WPF-only set of ready-made UI controls: bar and slider, popup menu, settings dialog, themes and style customisation.
Does Flyleaf support HDR video?
The README lists HDR10, HDR10+, HLG and Dolby Vision support with the FlyleafVP video processor, alongside deinterlacing, ICC profiles, Super Resolution on Nvidia and Intel hardware with D3D11VP, zero-copy with vertex shader crops and VSync.
Can Flyleaf do anything other than play video?
Yes. The README describes an audio-only mode that needs no UI control, a downloader and remuxer mode, and an extractor mode for pulling video frames out with support for stepping by a number of frames. The Samples folder contains a WinForms audio player, downloader and extractor.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/surgeonix-flyleaf)Was this useful?