Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
bf1ffb5
feat(#764): TripoSG backend — 1.5B rectified-flow geometry generation…
fernandotonon Jul 2, 2026
d666d2c
chore(#764): one-shot driver script for the TripoSG ONNX export
fernandotonon Jul 2, 2026
8d1cd55
fix(#764): TripoSG export driver — dedicated venv with pinned stack
fernandotonon Jul 2, 2026
51ec7ef
fix(#764): TripoSG export — stub CUDA-only diso, complete import-time…
fernandotonon Jul 3, 2026
35293db
fix(#764): TripoSG export driver — resilient weights download
fernandotonon Jul 3, 2026
da3ca5a
chore(#764): TripoSG model upload script (mirrors the TripoSR one; in…
fernandotonon Jul 3, 2026
a220563
fix(#764): TripoSG — keep Ort::TypeInfo alive while reading input shapes
fernandotonon Jul 3, 2026
4f90075
fix(#764): release TripoSG ONNX sessions per-stage to cut peak memory
fernandotonon Jul 3, 2026
6786c3c
fix(#764): cap TripoSG decoder chunk at 8192 points — 90 GB OOM kill
fernandotonon Jul 3, 2026
6a5a169
fix(#764): TripoSG live-test round — orientation, preprocessing, CFG …
fernandotonon Jul 3, 2026
570e1d6
feat(#764): MCP 'guidance' arg for generate_mesh_from_image + doc the…
fernandotonon Jul 3, 2026
4c734d9
fix(#764): TripoSG inverted normals + clay material + decoder-on-GPU
fernandotonon Jul 3, 2026
243633e
feat(#764): colour for TripoSG via TripoSR's colour field + drop the …
fernandotonon Jul 4, 2026
6739b45
feat(#764): TripoSG colour via front-photo projection + backend-aware…
fernandotonon Jul 4, 2026
3cc62a3
fix(#764): correct front-projection depth sign (camera looks toward +Z)
fernandotonon Jul 4, 2026
8eee9dd
feat(#764): soft photo→field crossfade on the TripoSG colour bake
fernandotonon Jul 4, 2026
3e0680f
feat(#764): pin input photo as the front view in the multi-view textu…
fernandotonon Jul 4, 2026
216c62d
feat(#764): 'Generate texture (AI)' option wires generate3d → multi-v…
fernandotonon Jul 4, 2026
7c6cb5b
docs(#764): document TripoSG colour bake, AI-texture option, and int8…
fernandotonon Jul 4, 2026
ce424a9
feat(#764): reorder AI-texture checkbox before Upscale + add its prog…
fernandotonon Jul 4, 2026
f8b8792
fix(#764): address PR #794 review — Windows ONNX path, SonarQube PRNG…
fernandotonon Jul 4, 2026
1b650c2
fix(#764): 32-bit index import + large-mesh export split — no more to…
fernandotonon Jul 4, 2026
1675e79
fix(#764): register the pinned front photo to the mesh silhouette bef…
fernandotonon Jul 5, 2026
16d0d41
refactor(#764): TripoSG colour = AI image-gen only; PBR after texture…
fernandotonon Jul 5, 2026
bf015c1
docs(#764): make MCP generate_mesh schema backend-aware + MD040 fence…
fernandotonon Jul 5, 2026
4aa0ae8
fix(#764): address round-2 review — n-gon export, real subject mask, …
fernandotonon Jul 5, 2026
771033e
fix(#764): auto-unwrap UV0 before the AI texture bake (fixes 'no usab…
fernandotonon Jul 5, 2026
4b85146
feat(#764): scale generated image-to-3D meshes x2 (both TripoSR + Tri…
fernandotonon Jul 5, 2026
a8414b3
build(#764): enable llama.cpp mtmd multimodal lib for image captionin…
fernandotonon Jul 5, 2026
74b9eaf
feat(#764): ImageCaptioner — SmolVLM image captioning via llama.cpp l…
fernandotonon Jul 5, 2026
2502e79
feat(#764): describe-then-generate — caption the image, generate ALL …
fernandotonon Jul 5, 2026
8685d60
fix(#764): fix UV unwrap on image-to-3D meshes (sliver charts / untex…
fernandotonon Jul 6, 2026
8f16590
feat(#764): caption the image in the BACKGROUND on select (fixes UI f…
fernandotonon Jul 6, 2026
1ae36a7
fix(#764): don't hard-error on empty caption; add SmolVLM upload script
fernandotonon Jul 6, 2026
6282bdc
feat(#764): show 'view N/M — step X/Y' status during the multi-view A…
fernandotonon Jul 6, 2026
c5a892f
feat(#764): richer image captions — detail-seeking prompt + higher to…
fernandotonon Jul 6, 2026
1b243b5
fix(#764): UV-unwrap freeze — revert xatlas maxIterations=2 (livelock…
fernandotonon Jul 6, 2026
7517f27
fix(#764): build xatlas single-threaded (XA_MULTITHREADED=0) — kills …
fernandotonon Jul 6, 2026
4f9eec5
feat(#764): decimate to a triangle budget before the AI-texture unwrap
fernandotonon Jul 7, 2026
de178b0
feat(#764): TripoSG faces front (180 Y) + AI-texture progress in the …
fernandotonon Jul 7, 2026
c736868
Merge remote-tracking branch 'origin/master' into feat/triposg-backend
fernandotonon Jul 7, 2026
89fccf3
fix(#764): CI — gate mtmd off Windows-MinGW + scope -DDEBUG to our ta…
fernandotonon Jul 7, 2026
8e324af
fix(#764): CI unit-tests-linux — add ImageCaptioner to the test-commo…
fernandotonon Jul 7, 2026
3a1965d
fix(#764): CI — apply DEBUG to qtmesh_test_common too (plugins_d.cfg …
fernandotonon Jul 7, 2026
767679c
feat(#764): default PBR maps OFF for TripoSG (looks better without)
fernandotonon Jul 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ docs/*
!docs/AUTO_UPDATER_DESIGN.md
!docs/IMAGE_TO_3D_SPIKE_764.md
!docs/IMAGE_TO_3D_QUALITY.md
!docs/TRIPOSG_EXPORT_NOTES.md
!docs/MESH_SEGMENTATION_STRATEGY.md

# minisign — never commit secret keys
Expand Down
3 changes: 2 additions & 1 deletion CLAUDE.md

Large diffs are not rendered by default.

42 changes: 40 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# Building directories
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "debug")
MESSAGE("DEBUG COMPILATION")
ADD_DEFINITIONS("-DDEBUG")
# NOTE: do NOT use ADD_DEFINITIONS("-DDEBUG") here — it's directory-scoped
# and leaks into the FetchContent'd llama.cpp/mtmd subdir, where
# mtmd-audio.cpp uses DEBUG as an ordinary identifier and fails to compile.
# Apply -DDEBUG to OUR targets only, via this marker + target_compile_
# definitions on the app/test targets (see src/CMakeLists.txt).
set(QTMESH_DEFINE_DEBUG ON)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib-debug)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib-debug)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/debug)
Expand Down Expand Up @@ -168,6 +173,24 @@ if(ENABLE_LOCAL_LLM)
set(LLAMA_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_SERVER OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
# The `mtmd` multimodal library (tools/mtmd) powers image captioning
# (SmolVLM, #764). It only builds under LLAMA_BUILD_TOOLS + LLAMA_BUILD_COMMON
# — but enabling all llama tools also builds CLI executables
# (cvector-generator, export-lora, llama-*-cli) that FAIL TO LINK on
# Windows-MinGW, where GGML_CPU is off (undefined ggml_backend_cpu_init /
# ggml_get_f32_nd). We don't ship those tools. So enable them only where
# they link: NOT on MinGW. The captioner (QTMESH_HAVE_MTMD) degrades
# gracefully when absent, and Windows-MinGW has ONNX off anyway, so the
# image-to-3D texture path there already falls back.
if(WIN32 AND MINGW)
set(LLAMA_BUILD_COMMON OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
set(QTMESH_HAVE_MTMD OFF)
else()
set(LLAMA_BUILD_COMMON ON CACHE BOOL "" FORCE)
set(LLAMA_BUILD_TOOLS ON CACHE BOOL "" FORCE)
set(QTMESH_HAVE_MTMD ON)
endif()

# Enable Metal on macOS for GPU acceleration
if(APPLE)
Expand Down Expand Up @@ -212,11 +235,20 @@ if(ENABLE_LOCAL_LLM)

FetchContent_MakeAvailable(llama_cpp)

# Include llama.cpp headers
# Include llama.cpp headers (+ mtmd multimodal for image captioning where
# available — not on Windows-MinGW, see QTMESH_HAVE_MTMD above).
include_directories(
${llama_cpp_SOURCE_DIR}/include
${llama_cpp_SOURCE_DIR}/ggml/include
)
if(QTMESH_HAVE_MTMD)
include_directories(
${llama_cpp_SOURCE_DIR}/tools/mtmd
${llama_cpp_SOURCE_DIR}/common
)
add_definitions(-DENABLE_MTMD)
message(STATUS "mtmd multimodal (image captioning) enabled")
endif()

add_definitions(-DENABLE_LOCAL_LLM)
message(STATUS "Local LLM support enabled with llama.cpp")
Expand Down Expand Up @@ -334,6 +366,12 @@ if(NOT TARGET xatlas)
add_library(xatlas STATIC ${xatlas_SOURCE_DIR}/source/xatlas/xatlas.cpp)
target_include_directories(xatlas PUBLIC ${xatlas_SOURCE_DIR}/source/xatlas)
set_target_properties(xatlas PROPERTIES POSITION_INDEPENDENT_CODE ON)
# Build xatlas SINGLE-THREADED (XA_MULTITHREADED=0). Its internal
# std::thread TaskScheduler livelocks on large/organic image-to-3D meshes —
# ComputeCharts spins forever in cthread_yield/swtch_pri, freezing the app
# with an untextured mesh (verified via process sampling, #764). Unwrap is a
# one-off; single-threaded is slower but deadlock-free and correct.
target_compile_definitions(xatlas PRIVATE XA_MULTITHREADED=0)
endif()
message(STATUS "xatlas enabled (auto UV unwrap)")

Expand Down
Loading
Loading