feat(rembg): add RemoveBG Studio - native background removal app

C++ WebView2 host app driving a Python/rembg engine as a JSON-stdio
sidecar, with live before/after preview for images and video frames.
Also includes the original CLI (removebg.py) built on the same
core/ engine.

The WebView2 SDK is fetched on demand via
native/third_party/fetch-webview2.ps1 (wired into the Makefile)
rather than vendored, since it's ~15MB of prebuilt/generated
Microsoft SDK content. A Makefile provides make sync/build/run/clean
as the standard entry points.
This commit is contained in:
2026-07-26 18:19:02 +01:00
parent ef24dbc4e5
commit fa0170daa9
28 changed files with 29783 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
cmake_minimum_required(VERSION 3.20)
project(RemoveBGStudio LANGUAGES CXX)
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message(FATAL_ERROR "RemoveBG Studio only ships a vendored x64 WebView2 loader. Configure for x64.")
endif()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(RBG_CONSOLE "Build with a console window for debug logging" OFF)
set(THIRD_PARTY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party")
add_executable(RemoveBGStudio
src/main.cpp
src/WebViewHost.cpp
src/SidecarProcess.cpp
src/Dialogs.cpp
src/PathUtil.cpp
)
if(RBG_CONSOLE)
# Console subsystem still shows the window; stdout/stderr are visible for debugging.
set_target_properties(RemoveBGStudio PROPERTIES WIN32_EXECUTABLE FALSE)
target_compile_definitions(RemoveBGStudio PRIVATE RBG_CONSOLE=1)
else()
set_target_properties(RemoveBGStudio PROPERTIES WIN32_EXECUTABLE TRUE)
endif()
target_include_directories(RemoveBGStudio PRIVATE
"${THIRD_PARTY_DIR}/webview2/include"
"${THIRD_PARTY_DIR}/json"
"${CMAKE_CURRENT_SOURCE_DIR}/src"
)
target_compile_definitions(RemoveBGStudio PRIVATE
UNICODE
_UNICODE
WIN32_LEAN_AND_MEAN
NOMINMAX
)
target_link_libraries(RemoveBGStudio PRIVATE
"${THIRD_PARTY_DIR}/webview2/lib/x64/WebView2LoaderStatic.lib"
ole32
oleaut32
shlwapi
shell32
user32
gdi32
comctl32
comdlg32
advapi32
version
)
target_compile_options(RemoveBGStudio PRIVATE /W4 /permissive-)
# WebView2LoaderStatic.lib is linked statically, so no WebView2Loader.dll is
# needed at runtime. Just stage the web UI next to the exe.
add_custom_command(TARGET RemoveBGStudio POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_CURRENT_SOURCE_DIR}/web"
"$<TARGET_FILE_DIR:RemoveBGStudio>/web"
COMMENT "Staging web/ assets next to RemoveBGStudio.exe"
)