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:
@@ -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"
|
||||
)
|
||||
Reference in New Issue
Block a user