Skip to content
sygnaltechPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Nullcast

Nullcast is a lightweight, client-side Windows video player built around the Nullcast bookmarks service. It plays local files, direct URLs, and YouTube videos, and syncs playlists, bookmarks, and playback position against your Nullcast workspaces.

Windows only. This is a native WPF desktop application and depends on Windows-specific frameworks (WPF, Windows Forms, DWM, virtual-desktop COM interop). It does not run on macOS or Linux — see Is it easy for you to fix below.

Repository layout

This repo contains two implementations of the player. They are independent .NET solutions:

Folder Status Video engine Notes
app-flyleaf/ Active — current development FlyleafLib + FFmpeg This is the app to build, run, and contribute to.
app-wpf/ Legacy — archived for reference LibVLCSharp + libVLC Kept in-tree as a reference implementation. Not maintained. Do not build new features here.
installer/ Release packaging Inno Setup Builds the shippable nullcast-setup-<version>.exe.

New work goes in app-flyleaf/. app-wpf/ is retained only so the earlier LibVLC-based approach stays available for comparison. Treat it as read-only history.

Features

  • Play local files, direct media URLs, and YouTube videos (YouTube resolution via yt-dlp, fetched automatically on first run).
  • Selectable YouTube quality (up to 4K / 2160p).
  • Playlist / bookmarks sync against the Sygnal Playlist service — workspaces, YouTube bookmarks, and resume-where-you-left-off playback position.
  • Local playback history.
  • Fullscreen (F11), drag-and-drop to open, mouse-wheel volume, right-click "copy video URL".
  • Pin to all virtual desktops and always-on-top support.
  • Remote control API — a local HTTP + Server-Sent-Events interface so other apps (voice agents, a control panel, scripts) can play/pause, change volume, start specific items, and read live playback state. See VIDEO-PLAYER-API.md.
  • Indigo Slate visual theme with bundled Instrument Sans font.

Installing

Grab nullcast-setup-<version>.exe from the releases page and run it. The installer is self-contained — no .NET runtime to install first — and asks whether to install for all users or just you. Nothing else is required; yt-dlp and its JS runtime are fetched on first launch.

The installer is currently unsigned, so SmartScreen will warn on first run.

Building the installer

Needs Inno Setup 6 or 7 alongside the .NET SDK:

.\installer\build.ps1

Output lands in installer\Output\. See app-flyleaf/DEPLOY.md for the full release process.

Requirements

  • Windows 10/11
  • .NET 8 SDK (net8.0-windows)
  • A code editor / IDE: Visual Studio 2022, JetBrains Rider, or VS Code with the C# Dev Kit.

Build & run

From the app-flyleaf directory:

dotnet run                # Debug
dotnet run -c Release     # Release

Or from your IDE:

  • F5 — build + run with debugger
  • Ctrl+F5 — build + run without debugger
  • Ctrl+Shift+B — build only

A release build produces bin/Release/net8.0-windows/VideoPlayer.exe.

FFmpeg note

FlyleafLib requires the FFmpeg 8.0 shared libraries. They live in app-flyleaf/FFmpeg/ and are copied into the build output automatically. The Flyleaf.FFmpeg.Bindings package version (8.0.1) must match the FFmpeg DLL major version (8.0) — do not upgrade one without the other.

Platform

This is a Win32/WPF application by design. Porting to macOS or Linux would require replacing the entire UI layer (WPF → e.g. Avalonia or MAUI), the Windows-native interop, and revisiting the video backend. It is effectively a rewrite, not a configuration change.

Contributing

The project is MIT-licensed (see LICENSE) and open for the team to evolve. When contributing:

  • Do all new work in app-flyleaf/. Leave app-wpf/ alone.
  • Keep the FFmpeg binding/DLL versions in lockstep (see above).
  • Follow the existing project conventions in AGENTS.md / CLAUDE.md.

License

The original source code in this repository is released under the MIT License.

Third-party components & licenses

This application links against and/or redistributes third-party components that carry their own licenses. The MIT license on our code does not relicense these — they remain under their respective terms, and those terms are preserved here. Because the video engines are linked dynamically (LGPL), MIT licensing of our own code is compatible.

app-flyleaf/ (active):

Component Version License
FlyleafLib 3.10.2 LGPL-3.0-or-later
FlyleafLib.Controls.WPF 1.6.2 LGPL-3.0-or-later
Flyleaf.FFmpeg.Bindings 8.0.1 LGPL-3.0-or-later
FFmpeg (shared libs, redistributed in FFmpeg/) 8.0 LGPL-2.1-or-later
yt-dlp (downloaded at runtime) latest The Unlicense (public domain)
Instrument Sans (bundled font) — SIL Open Font License 1.1 — see app-flyleaf/Fonts/OFL.txt

app-wpf/ (legacy):

Component Version License
LibVLCSharp.WPF 3.9.5 LGPL-2.1-or-later
VideoLAN.LibVLC.Windows (libVLC) 3.0.23 LGPL-2.1-or-later

If you redistribute builds of this application, ensure the corresponding license texts for the LGPL components (FlyleafLib, FFmpeg, libVLC) and the Instrument Sans OFL license are included alongside the binaries, per those licenses' requirements.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages