Skip to main content

Built-in Modules

Built-in modules are compiled into the host rather than shipped as plugin DLLs/SOs. They provide the capabilities plugins build on — playback, audio, graphics, the window, settings — behind the same service interfaces a plugin discovers with ctx.GetService<T>().

Each has a FRAMELIFT_MODULE_<NAME> CMake option (default from its JSON), so optional ones can be compiled out; required ones cannot. The authoritative required/toggleable status for your tree is printed at configure time — see Lean Builds.

Host modules (modules/host/)

ModulePurpose
framelift.module_runtimePlugin discovery, dependency resolution, the module context, settings bridge.
framelift.settingsSettings storage, defaults, and mapping helpers.
framelift.servicesHotkeys, focus management, file dialogs.
framelift.controlsHost playback/app hotkeys (pause, volume, seek, fullscreen).
framelift.loggingHost logging sink and in-memory ring buffer backing Log::* and the LogViewer plugin.
framelift.read_aheadMemory-bounded read-ahead cache budget and metrics.
framelift.audioQt QAudioSink PCM device + swresample, master clock, volume/mute/ducking, libavfilter normalization.
framelift.playbackFFmpeg-backed playback and subtitles (libass), hardware-decode helpers. Required.
framelift.uiQt/QML host UI services and theming. Required.

Graphics modules (modules/gfx/)

ModulePurpose
framelift.graphics_coreGraphics API selection and renderer interfaces. Required.
framelift.graphics_openglOpenGL backend and video renderer. Required.
framelift.graphics_vulkanVulkan backend with zero-copy GPU decode support. Optional, enabled by default.

Platform modules (modules/platform/)

ModulePurpose
framelift.window_qtQt 6 (Qt Quick) window backend, app event translation, and scene-graph video integration. Required.
framelift.win_shellQt-backed playback error notifications on Windows.
framelift.dir_watchCross-platform directory watching (Win32 + Linux). Required.

The graphics backend behind the window — OpenGL or Vulkan — is an internal detail; plugins never see it. The host owns all video and UI rendering. Plugins contribute UI as embedded Qt Quick (QML) layered over the host video by renderOrder, and reach media output through the media-output interfaces.