mirror of
https://github.com/thunderheronight/splat-workshop.git
synced 2026-10-17 11:01:47 +02:00
Web interface, tray icon and recording check for turning Arcturus Vision Camera recordings from the Steam Frame into Gaussian splats and copying them into the Gaussian XR gallery. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
49 lines
2.1 KiB
Bash
Executable File
49 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# Start Splat Workshop.
|
||
# splat-workshop tray icon + open the web interface (tray needs PySide6, or uv to fetch it)
|
||
# splat-workshop --background tray icon only (e.g. for autostart)
|
||
# splat-workshop --no-tray web server in the background + open the web interface; stops itself when idle
|
||
# splat-workshop --server web server in the foreground (Ctrl+C to stop)
|
||
ROOT=$(cd "$(dirname "$(readlink -f "$0")")" && pwd)
|
||
cd "$ROOT" || exit 1
|
||
|
||
python3 -c 'import sys; sys.exit(sys.version_info < (3, 11))' || { echo "Splat Workshop needs Python 3.11 or newer" >&2; exit 1; }
|
||
PORT=$(python3 -c 'from splat_workshop import config; print(config.load().port)')
|
||
URL="http://127.0.0.1:$PORT/"
|
||
|
||
ours() { curl -fsS -m 2 "${URL}api/ping" 2>/dev/null | grep -q '"app": "splat-workshop"'; }
|
||
|
||
no_tray() {
|
||
if ! ours; then
|
||
if ss -ltnH "sport = :$PORT" 2>/dev/null | grep -q .; then
|
||
msg="Port $PORT is used by another program (change [server] port in the config)."
|
||
notify-send -a "Splat Workshop" -i dialog-error "Splat Workshop" "$msg" 2>/dev/null || echo "$msg" >&2
|
||
exit 1
|
||
fi
|
||
mkdir -p "${XDG_STATE_HOME:-$HOME/.local/state}/splat-workshop"
|
||
setsid python3 -m splat_workshop.server >>"${XDG_STATE_HOME:-$HOME/.local/state}/splat-workshop/server.log" 2>&1 < /dev/null &
|
||
for _ in $(seq 50); do ours && break; sleep 0.1; done
|
||
fi
|
||
xdg-open "$URL" >/dev/null 2>&1 &
|
||
}
|
||
|
||
case "${1:-}" in
|
||
--server) exec python3 -m splat_workshop.server ;;
|
||
--no-tray) no_tray; exit 0 ;;
|
||
esac
|
||
|
||
# Tray icon: system PySide6, otherwise let uv provide it (downloaded once, ~100 MB)
|
||
if python3 -c 'import PySide6' 2>/dev/null; then
|
||
python3 -m splat_workshop.tray "$@"
|
||
elif command -v uv >/dev/null; then
|
||
uv run --quiet --no-project --with 'PySide6-Essentials>=6.5' python -m splat_workshop.tray "$@"
|
||
else
|
||
false
|
||
fi
|
||
rc=$?
|
||
# 2 = no system tray available; other errors: fall back to the plain web interface
|
||
if [ $rc -ne 0 ]; then
|
||
[ $rc -ne 2 ] && echo "Tray icon not available – starting without it." >&2
|
||
no_tray
|
||
fi
|