diff --git a/app/dist/index.html b/app/dist/index.html
index cdd6929..eee907d 100644
--- a/app/dist/index.html
+++ b/app/dist/index.html
@@ -1,18 +1,18 @@
-
-
-
-
-
-
-
-
-
- Local AI Image Generator
+
+
+
+
+
+
+
+
+
+ Local AI Image Generator
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/scripts/build_from_source.sh b/scripts/build_from_source.sh
index 6b39a34..3c55636 100755
--- a/scripts/build_from_source.sh
+++ b/scripts/build_from_source.sh
@@ -91,6 +91,10 @@ SO_PATH=$(find . -name "libstable-diffusion.so" | head -n 1)
if [ -n "$SO_PATH" ]; then
cp "$SO_PATH" "$BACKEND_DIR/cpu/"
echo "Copied libstable-diffusion.so to CPU directory."
+ chmod +x "$BACKEND_DIR/cpu/sd-cpu" "$BACKEND_DIR/cpu/sd-server-cpu" 2>/dev/null || true
+ if [ -f "$BACKEND_DIR/cpu/sd-cli-cpu" ]; then
+ chmod +x "$BACKEND_DIR/cpu/sd-cli-cpu" 2>/dev/null || true
+ fi
else
echo "WARNING: libstable-diffusion.so not found for CPU build!"
fi
@@ -124,6 +128,10 @@ if rm -rf build-vulkan && mkdir build-vulkan && cd build-vulkan && \
else
echo "WARNING: libstable-diffusion.so not found for Vulkan build!"
fi
+ chmod +x "$BACKEND_DIR/vulkan/sd-vulkan" "$BACKEND_DIR/vulkan/sd-server-vulkan" 2>/dev/null || true
+ if [ -f "$BACKEND_DIR/vulkan/sd-cli-vulkan" ]; then
+ chmod +x "$BACKEND_DIR/vulkan/sd-cli-vulkan" 2>/dev/null || true
+ fi
else
echo "WARNING: Vulkan backend build failed. Bypassing Vulkan backend compilation..."
fi
@@ -152,6 +160,10 @@ SO_PATH_CUDA=$(find . -name "libstable-diffusion.so" | head -n 1)
if [ -n "$SO_PATH_CUDA" ]; then
cp "$SO_PATH_CUDA" "$BACKEND_DIR/cuda/"
echo "Copied libstable-diffusion.so to CUDA directory."
+ chmod +x "$BACKEND_DIR/cuda/sd-cuda" "$BACKEND_DIR/cuda/sd-server-cuda" 2>/dev/null || true
+ if [ -f "$BACKEND_DIR/cuda/sd-cli-cuda" ]; then
+ chmod +x "$BACKEND_DIR/cuda/sd-cli-cuda" 2>/dev/null || true
+ fi
else
echo "WARNING: libstable-diffusion.so not found for CUDA build!"
fi
diff --git a/scripts/setup.sh b/scripts/setup.sh
index 5ad0d56..b8dc7f1 100755
--- a/scripts/setup.sh
+++ b/scripts/setup.sh
@@ -291,7 +291,7 @@ else
# CPU backend (always)
CPU_BACKEND_DIR="$BACKEND_DIR/cpu"
-if [[ ! -f "$CPU_BACKEND_DIR/sd-cpu" ]]; then
+if [[ ! -f "$CPU_BACKEND_DIR/sd-cpu" || ! -f "$CPU_BACKEND_DIR/sd-server-cpu" ]]; then
mkdir -p "$CPU_BACKEND_DIR"
CPU_ZIP="$TOOLS_DIR/sd-cpu.zip"
download_file "$SD_BASE_URL/sd-master-${SD_SHORT_HASH}-bin-Linux-Ubuntu-24.04-x86_64.zip" "$CPU_ZIP" "stable-diffusion.cpp CPU Backend (Linux x86_64)"
@@ -299,15 +299,15 @@ if [[ ! -f "$CPU_BACKEND_DIR/sd-cpu" ]]; then
rm -f "$CPU_ZIP"
copy_binaries_from_extracted "$CPU_BACKEND_DIR/extracted" "$CPU_BACKEND_DIR" "sd-cpu" "sd-server-cpu"
rm -rf "$CPU_BACKEND_DIR/extracted"
- chmod +x "$CPU_BACKEND_DIR/sd-cpu" 2>/dev/null || true
print_ok "CPU backend installed."
else
print_ok "CPU backend already ready."
fi
+chmod +x "$CPU_BACKEND_DIR/sd-cpu" "$CPU_BACKEND_DIR/sd-server-cpu" 2>/dev/null || true
# Vulkan backend (always - cross-vendor GPU fallback)
VULKAN_BACKEND_DIR="$BACKEND_DIR/vulkan"
-if [[ ! -f "$VULKAN_BACKEND_DIR/sd-vulkan" ]]; then
+if [[ ! -f "$VULKAN_BACKEND_DIR/sd-vulkan" || ! -f "$VULKAN_BACKEND_DIR/sd-server-vulkan" ]]; then
mkdir -p "$VULKAN_BACKEND_DIR"
VULKAN_ZIP="$TOOLS_DIR/sd-vulkan.zip"
download_file "$SD_BASE_URL/sd-master-${SD_SHORT_HASH}-bin-Linux-Ubuntu-24.04-x86_64-vulkan.zip" "$VULKAN_ZIP" "stable-diffusion.cpp Vulkan Backend (Linux x86_64)"
@@ -315,16 +315,16 @@ if [[ ! -f "$VULKAN_BACKEND_DIR/sd-vulkan" ]]; then
rm -f "$VULKAN_ZIP"
copy_binaries_from_extracted "$VULKAN_BACKEND_DIR/extracted" "$VULKAN_BACKEND_DIR" "sd-vulkan" "sd-server-vulkan"
rm -rf "$VULKAN_BACKEND_DIR/extracted"
- chmod +x "$VULKAN_BACKEND_DIR/sd-vulkan" 2>/dev/null || true
print_ok "Vulkan backend installed."
else
print_ok "Vulkan backend already ready."
fi
+chmod +x "$VULKAN_BACKEND_DIR/sd-vulkan" "$VULKAN_BACKEND_DIR/sd-server-vulkan" 2>/dev/null || true
# ROCm backend (optional --max-perf, or auto-detected AMD)
ROCM_BACKEND_DIR="$BACKEND_DIR/rocm"
if [[ $MAX_PERF -eq 1 ]] && [[ "$VENDOR" == "amd" || "$VENDOR" == "" ]]; then
- if [[ ! -f "$ROCM_BACKEND_DIR/sd-rocm" ]]; then
+ if [[ ! -f "$ROCM_BACKEND_DIR/sd-rocm" || ! -f "$ROCM_BACKEND_DIR/sd-server-rocm" ]]; then
mkdir -p "$ROCM_BACKEND_DIR"
ROCM_ZIP="$TOOLS_DIR/sd-rocm.zip"
print_warn "ROCm backend is ~1.2 GB. This may take a while..."
@@ -333,11 +333,11 @@ if [[ $MAX_PERF -eq 1 ]] && [[ "$VENDOR" == "amd" || "$VENDOR" == "" ]]; then
rm -f "$ROCM_ZIP"
copy_binaries_from_extracted "$ROCM_BACKEND_DIR/extracted" "$ROCM_BACKEND_DIR" "sd-rocm" "sd-server-rocm"
rm -rf "$ROCM_BACKEND_DIR/extracted"
- chmod +x "$ROCM_BACKEND_DIR/sd-rocm" 2>/dev/null || true
print_ok "ROCm backend installed."
else
print_ok "ROCm backend already ready."
fi
+ chmod +x "$ROCM_BACKEND_DIR/sd-rocm" "$ROCM_BACKEND_DIR/sd-server-rocm" 2>/dev/null || true
fi
# CUDA backend on Linux is intentionally disabled.
diff --git a/start.sh b/start.sh
index 4736315..f6eeec8 100755
--- a/start.sh
+++ b/start.sh
@@ -53,9 +53,11 @@ if [[ "$PLATFORM" == "Darwin" ]]; then
SETUP_REASON="No macOS Metal backend binary is installed."
fi
else
- # At minimum we need CPU or Vulkan backend on Linux
- if [[ ! -f "$CPU_BACKEND_PATH" && ! -f "$BACKEND_PATH" ]]; then
- SETUP_REASON="No Linux backend binary is installed."
+ # At minimum we need CPU or Vulkan backend on Linux, and both CLI and server binaries must be executable
+ CPU_SERVER_PATH="$APP_DIR/backend/linux/cpu/sd-server-cpu"
+ VULKAN_SERVER_PATH="$APP_DIR/backend/linux/vulkan/sd-server-vulkan"
+ if [[ ! -x "$CPU_BACKEND_PATH" || ! -x "$CPU_SERVER_PATH" ]] && [[ ! -x "$BACKEND_PATH" || ! -x "$VULKAN_SERVER_PATH" ]]; then
+ SETUP_REASON="Linux backend binaries are missing or not executable."
fi
fi