#!/bin/bash # ============================================================================= # switch-quality.sh - Basculer la qualite d'image de photobooth-app # ============================================================================= # Usage: # bash switch-quality.sh high # Qualite haute (4608x3072, quality 100) # bash switch-quality.sh low # Qualite basse (2304x1536, quality 90) # bash switch-quality.sh status # Afficher la config actuelle # ============================================================================= set -uo pipefail API_URL="http://127.0.0.1:8083" API_USER="admin" API_PASS="PhotoBooth2026!" GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # --- Obtenir le token --- get_token() { curl -s -X POST "${API_URL}/api/admin/auth/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=password&username=${API_USER}&password=${API_PASS}" \ | python3 -c 'import sys,json;print(json.load(sys.stdin)["access_token"])' } # --- Lire la config actuelle --- get_config() { local token="$1" curl -s "${API_URL}/api/admin/config/app" \ -H "Authorization: Bearer ${token}" } # --- Appliquer une config --- set_config() { local token="$1" local config="$2" curl -s -X PATCH "${API_URL}/api/admin/config/app" \ -H "Authorization: Bearer ${token}" \ -H "Content-Type: application/json" \ -d "${config}" } # --- Afficher le statut --- show_status() { local token token=$(get_token) local config config=$(get_config "$token") local capture_w capture_h preview_w preview_h full_still preview_still quality capture_w=$(echo "$config" | python3 -c 'import sys,json;c=json.load(sys.stdin);print(c["backends"]["group_backends"][0]["backend_config"]["CAPTURE_CAM_RESOLUTION_WIDTH"])') capture_h=$(echo "$config" | python3 -c 'import sys,json;c=json.load(sys.stdin);print(c["backends"]["group_backends"][0]["backend_config"]["CAPTURE_CAM_RESOLUTION_HEIGHT"])') preview_w=$(echo "$config" | python3 -c 'import sys,json;c=json.load(sys.stdin);print(c["backends"]["group_backends"][0]["backend_config"]["PREVIEW_CAM_RESOLUTION_WIDTH"])') preview_h=$(echo "$config" | python3 -c 'import sys,json;c=json.load(sys.stdin);print(c["backends"]["group_backends"][0]["backend_config"]["PREVIEW_CAM_RESOLUTION_HEIGHT"])') full_still=$(echo "$config" | python3 -c 'import sys,json;c=json.load(sys.stdin);print(c["mediaprocessing"]["full_still_length"])') preview_still=$(echo "$config" | python3 -c 'import sys,json;c=json.load(sys.stdin);print(c["mediaprocessing"]["preview_still_length"])') quality=$(echo "$config" | python3 -c 'import sys,json;c=json.load(sys.stdin);print(c["backends"]["group_backends"][0]["backend_config"]["original_still_quality"])') echo "=== Configuration actuelle ===" echo " Capture: ${capture_w}x${capture_h}" echo " Preview: ${preview_w}x${preview_h}" echo " Full still: ${full_still}" echo " Preview still: ${preview_still}" echo " JPEG quality: ${quality}" if [ "$capture_w" -ge 4000 ]; then echo -e " Mode: ${GREEN}HAUTE QUALITE${NC}" else echo -e " Mode: ${YELLOW}BASSE QUALITE (economie RAM)${NC}" fi } # --- Appliquer haute qualite --- set_high() { local token token=$(get_token) echo "Passage en HAUTE QUALITE..." # Config backends (camera) set_config "$token" '{ "backends": { "group_backends": [{ "enabled": true, "description": "pi camera module V3", "backend_config": { "orientation": "1: 0°", "backend_type": "Picamera2", "camera_num": 0, "CAPTURE_CAM_RESOLUTION_WIDTH": 4608, "CAPTURE_CAM_RESOLUTION_HEIGHT": 3072, "PREVIEW_CAM_RESOLUTION_WIDTH": 2304, "PREVIEW_CAM_RESOLUTION_HEIGHT": 1536, "LIVEVIEW_RESOLUTION_WIDTH": 750, "LIVEVIEW_RESOLUTION_HEIGHT": 500, "framerate_still_mode": 20, "framerate_video_mode": 25, "frame_skip_count": 4, "optimized_lowlight_short_exposure": false, "videostream_quality": "MEDIUM", "original_still_quality": 100 } }] }, "mediaprocessing": { "full_still_length": 4608, "preview_still_length": 2304, "thumbnail_still_length": 960 } }' > /dev/null echo -e "${GREEN}HAUTE QUALITE activee${NC}" echo " Capture: 4608x3072, Quality: 100" echo " ATTENTION: consomme plus de RAM" echo "" echo "Redemarrage de photobooth-app necessaire :" echo " systemctl --user restart photobooth-app" } # --- Appliquer basse qualite --- set_low() { local token token=$(get_token) echo "Passage en BASSE QUALITE (economie RAM)..." set_config "$token" '{ "backends": { "group_backends": [{ "enabled": true, "description": "pi camera module V3", "backend_config": { "orientation": "1: 0°", "backend_type": "Picamera2", "camera_num": 0, "CAPTURE_CAM_RESOLUTION_WIDTH": 2304, "CAPTURE_CAM_RESOLUTION_HEIGHT": 1536, "PREVIEW_CAM_RESOLUTION_WIDTH": 1152, "PREVIEW_CAM_RESOLUTION_HEIGHT": 768, "LIVEVIEW_RESOLUTION_WIDTH": 750, "LIVEVIEW_RESOLUTION_HEIGHT": 500, "framerate_still_mode": 20, "framerate_video_mode": 25, "frame_skip_count": 4, "optimized_lowlight_short_exposure": false, "videostream_quality": "MEDIUM", "original_still_quality": 90 } }] }, "mediaprocessing": { "full_still_length": 2304, "preview_still_length": 1200, "thumbnail_still_length": 480 } }' > /dev/null echo -e "${YELLOW}BASSE QUALITE activee${NC}" echo " Capture: 2304x1536, Quality: 90" echo " Economie RAM optimale" echo "" echo "Redemarrage de photobooth-app necessaire :" echo " systemctl --user restart photobooth-app" } # --- Main --- case "${1:-status}" in high|haute|hq) set_high ;; low|basse|lq) set_low ;; status|info) show_status ;; *) echo "Usage: $0 {high|low|status}" echo " high - Haute qualite (4608x3072, quality 100)" echo " low - Basse qualite (2304x1536, quality 90)" echo " status - Afficher la configuration actuelle" exit 1 ;; esac