Scopes++

November 22, 2025 · View on GitHub

CMake C++23 License Stars

Scopes++ Screenshot

Scopes++ is a work-in-progress native C++23 realtime waveform, vectorscope, video-analyzer implemented with ImGui, OpenGL and OpenCL. It aims to provide video professionals with a high-performance tool for checking color, exposure, and signal integrity in live video streams.

This software is an open-source rework of LiveScopes.tv, which I previously wrote in Dart and C++ with Flutter. The goal of this rework is to solve performance and graphics-API limitations, while also providing it as an open-source project for the community to use and contribute to. The use of ImGui as the GUI framework also allows for a very flexible and user-customizable interface with pop-out windows and docking, which was not possible in the previous Flutter-based implementation.

This project is organized as a standard CMake project and produces a single executable. Runtime assets and OpenCL kernels are copied next to the executable by post-build steps so the binary can be run directly from build/.

Features (WIP)

  • Waveforms (Luma, RGB, RGB Parade, RGB Blacklevel, YUV Parade)
  • UV Vectorscope
  • CIE 1931 Chromaticity
  • Double Diamond Scope
  • False Color Viewer
  • Selectable color spaces (Linear RGB, sRGB, BT.709, BT.601_525, BT.601_625, BT.2020) and legal ranges
  • GPU-accelerated image pipeline (OpenGL + OpenCL interop)
  • 32-Bit float based processing pipeline
  • Customizable & dockable user-interface
  • NDI Input support

Roadmap

  • Add webcam capture sources
  • Add Blackmagic DeckLink input support
  • Add support for LUTs
  • Add focus peaking
  • Add exposure zebra

Known issues

  • Mismatch between OpenGL and OpenCL device selection when multiple GPUs are present. This causes errors/crashes.

Overview

src/
└─ app/
   ├─ src/        # C++ sources
   ├─ assets/     # UI and static assets
   ├─ test/       # Unit tests
   └─ kernels/    # OpenCL kernels
ext/              # External libraries (see below)
docs/screenshots/ # Documentation images

Quickstart (Windows)

git clone https://github.com/MindStudioOfficial/scopes_plusplus.git
cd scopes_plusplus
cmake -B build
cmake --build build --parallel --config Release
.\build\src\app\Release\scopes++.exe

Notes

  • The NDI SDK is expected under ext/ndi. A post-build step copies Processing.NDI.Lib.Advanced.x64.dll to the runtime folder. You need to download the NDI SDK separately from NDI's website due to licensing restrictions. The expected folder structure is:
📂 ext/ndi
├── 📂 include
│   ├── Processing.NDI.Lib.h
│   └── other headers
├── Processing.NDI.Lib.Advanced.x64.dll
├── Processing.NDI.Lib.Advanced.x64.lib
└── Processing.NDI.Lib.License.txt
  • OpenCL kernels and assets/ are copied to the build output via CMake post-build steps/targets.

Development patterns & conventions

  • New source files: place .cpp files under src/app/src and headers under src/app/src (CMake uses file(GLOB_RECURSE ... CONFIGURE_DEPENDS)). Re-run setup_cmake.bat if CMake doesn't pick up new files.
  • Precompiled headers (PCH) are used for MSVC: pch.hpp / pch.cpp. Follow the existing pattern if adding large headers.
  • Keep binary dependencies in ext/ where possible; CMake links to those targets or libraries for deterministic builds.

Testing

This project uses Catch2 as the testing framework. Unit tests are located in the src/app/test/ directory. CMake creates a separate "tests" target to build and run the tests. You can run the tests using the following command:

cmake --build build --target tests --config Debug

.\build\src\app\test\Debug\tests.exe

Contributing

Contributions are welcome. Please open issues for discussion before submitting larger changes. For small fixes, open a pull request with a clear description of the change and how it was tested.

Suggested PR checklist:

  • Build succeeds in Debug and Release on Windows.
  • Any new runtime asset or OpenCL kernel is added to the correct assets/ or kernels/ folder and tested.
  • Follow existing code style and minimal, focused commits.

License

This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.