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/.
- 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
- Add webcam capture sources
- Add Blackmagic DeckLink input support
- Add support for LUTs
- Add focus peaking
- Add exposure zebra
- Mismatch between OpenGL and OpenCL device selection when multiple GPUs are present. This causes errors/crashes.
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
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- The NDI SDK is expected under
ext/ndi. A post-build step copiesProcessing.NDI.Lib.Advanced.x64.dllto 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.
- New source files: place
.cppfiles undersrc/app/srcand headers undersrc/app/src(CMake usesfile(GLOB_RECURSE ... CONFIGURE_DEPENDS)). Re-runsetup_cmake.batif 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.
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.exeContributions 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/orkernels/folder and tested. - Follow existing code style and minimal, focused commits.
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.
