diff --git a/Opencode/scripts/script_print.sh b/Opencode/scripts/script_print.sh index ced8a79..f65c646 100644 --- a/Opencode/scripts/script_print.sh +++ b/Opencode/scripts/script_print.sh @@ -15,20 +15,15 @@ # # ── CALIBRAGE IMPRESSION ───────────────────────────────────────────────────── # -# Selphy CP1300 — papier Postcard 150x100mm (ratio exact 3:2) -# Image traitée par photobooth-app : 2000x1333 (ratio 3:2) -# Résolution cible à 300 dpi : 1772x1181 px -# -# TEST_MODE contrôle la méthode de préparation : -# A — resize 1772x1181 + media=Postcard + fit-to-page (pas de raw) -# → marges blanches possibles si le driver ajoute des marges -# B — resize 1860x1240 (overscan 5%) + media=Postcard.Fullbleed + print-scaling=fill -# → image légèrement agrandie puis rognée par la Selphy pour remplir le papier -# -# Après validation, laisser la valeur qui donne le meilleur résultat. +# Selphy CP1300 — papier Postcard borderless 100x148mm +# Image traitée par photobooth-app : 2000x1333 +# Overscan : 2114x1418 avec fond blanc (la Selphy rogne les bords en borderless) +# Décalage : -roll -12+8 (calibré pour l'offset naturel de l'imprimante) +# Option CUPS : PageSize=Postcard.Borderless (défaut imprimante = om_postcard-borderless_100x148mm) +# PAS de -o raw : le driver CUPS gère le rendu correctement # ============================================================================= -TEST_MODE="B" # A ou B +# (plus de TEST_MODE — paramètres calibrés définitifs ci-dessous) set -uo pipefail @@ -70,52 +65,24 @@ filename_print="${filename_no_ext}_print.jpg" if ! command -v convert &>/dev/null; then log_error "ImageMagick (convert) non installe — impression de l'original" FILE_TO_PRINT="$filename" - PRINT_OPTIONS="-o media=Postcard -o fit-to-page" + PRINT_OPTIONS="-o PageSize=Postcard.Borderless" else - log_info "Preparation image (mode ${TEST_MODE})..." - - if [ "$TEST_MODE" = "A" ]; then - # ── MODE A : 300 dpi exact, fit-to-page ───────────────────────────── - # Resize à la résolution native 300 dpi du Selphy (150x100mm). - # Le driver CUPS aligne l'image sur le papier sans rognage. - # Si des marges blanches apparaissent, passer au mode B. - if convert "$filename" \ - -resize 1772x1181 \ - -gravity center \ - -background white \ - -extent 1772x1181 \ - -quality 95 \ - "$filename_print" 2>/dev/null; then - FILE_TO_PRINT="$filename_print" - PRINT_OPTIONS="-o media=Postcard -o fit-to-page" - log_info "Image preparee (mode A): 1772x1181 → $filename_print" - else - log_error "Echec convert mode A — impression original" - FILE_TO_PRINT="$filename" - PRINT_OPTIONS="-o media=Postcard -o fit-to-page" - fi - + log_info "Preparation image pour impression borderless..." + if convert "$filename" \ + -resize 2000x1333 \ + -background white \ + -gravity center \ + -extent 2114x1418 \ + -roll -12+8 \ + -quality 95 \ + "$filename_print" 2>/dev/null; then + FILE_TO_PRINT="$filename_print" + PRINT_OPTIONS="-o PageSize=Postcard.Borderless" + log_info "Image preparee: 2114x1418 (overscan+roll) → $filename_print" else - # ── MODE B : overscan 5% + fullbleed fill ─────────────────────────── - # Image légèrement agrandie (5% overscan) pour que la Selphy en mode - # Fullbleed puisse rogner les bords sans laisser de marges blanches. - # print-scaling=fill remplace le raw mode et laisse le driver gérer - # l'alignement — élimine les bordures noires de l'ancien script. - if convert "$filename" \ - -resize 1860x1240 \ - -gravity center \ - -background white \ - -extent 1860x1240 \ - -quality 95 \ - "$filename_print" 2>/dev/null; then - FILE_TO_PRINT="$filename_print" - PRINT_OPTIONS="-o media=Postcard.Fullbleed -o print-scaling=fill" - log_info "Image preparee (mode B): 1860x1240 → $filename_print" - else - log_error "Echec convert mode B — impression original" - FILE_TO_PRINT="$filename" - PRINT_OPTIONS="-o media=Postcard.Fullbleed -o print-scaling=fill" - fi + log_error "Echec convert — impression de l'original" + FILE_TO_PRINT="$filename" + PRINT_OPTIONS="-o PageSize=Postcard.Borderless" fi fi diff --git a/photobooth-app/script/script_print.sh b/photobooth-app/script/script_print.sh index 3a10f9d..30a093d 100644 --- a/photobooth-app/script/script_print.sh +++ b/photobooth-app/script/script_print.sh @@ -15,20 +15,15 @@ # # ── CALIBRAGE IMPRESSION ───────────────────────────────────────────────────── # -# Selphy CP1300 — papier Postcard 150x100mm (ratio exact 3:2) -# Image traitée par photobooth-app : 2000x1333 (ratio 3:2) -# Résolution cible à 300 dpi : 1772x1181 px -# -# TEST_MODE contrôle la méthode de préparation : -# A — resize 1772x1181 + media=Postcard + fit-to-page (pas de raw) -# → marges blanches possibles si le driver ajoute des marges -# B — resize 1860x1240 (overscan 5%) + media=Postcard.Fullbleed + print-scaling=fill -# → image légèrement agrandie puis rognée par la Selphy pour remplir le papier -# -# Après validation, laisser la valeur qui donne le meilleur résultat. +# Selphy CP1300 — papier Postcard borderless 100x148mm +# Image traitée par photobooth-app : 2000x1333 +# Overscan : 2114x1418 avec fond blanc (la Selphy rogne les bords en borderless) +# Décalage : -roll -12+8 (calibré pour l'offset naturel de l'imprimante) +# Option CUPS : PageSize=Postcard.Borderless (défaut imprimante = om_postcard-borderless_100x148mm) +# PAS de -o raw : le driver CUPS gère le rendu correctement # ============================================================================= -TEST_MODE="B" # A ou B +# (plus de TEST_MODE — paramètres calibrés définitifs ci-dessous) set -uo pipefail @@ -70,44 +65,62 @@ filename_print="${filename_no_ext}_print.jpg" if ! command -v convert &>/dev/null; then log_error "ImageMagick (convert) non installe — impression de l'original" FILE_TO_PRINT="$filename" - PRINT_OPTIONS="-o media=Postcard -o fit-to-page" + PRINT_OPTIONS="-o PageSize=Postcard.Borderless" else - log_info "Preparation image (mode ${TEST_MODE})..." - - if [ "$TEST_MODE" = "A" ]; then - # ── MODE A : 300 dpi exact, fit-to-page ───────────────────────────── - # Resize à la résolution native 300 dpi du Selphy (150x100mm). - # Le driver CUPS aligne l'image sur le papier sans rognage. - # Si des marges blanches apparaissent, passer au mode B. - if convert "$filename" \ - -resize 1772x1181 \ - -gravity center \ - -background white \ - -extent 1772x1181 \ - -quality 95 \ - "$filename_print" 2>/dev/null; then - FILE_TO_PRINT="$filename_print" - PRINT_OPTIONS="-o media=Postcard -o fit-to-page" - log_info "Image preparee (mode A): 1772x1181 → $filename_print" - else - log_error "Echec convert mode A — impression original" - FILE_TO_PRINT="$filename" - PRINT_OPTIONS="-o media=Postcard -o fit-to-page" - fi - + log_info "Preparation image pour impression borderless..." + if convert "$filename" \ + -resize 2000x1333 \ + -background white \ + -gravity center \ + -extent 2114x1418 \ + -roll -12+8 \ + -quality 95 \ + "$filename_print" 2>/dev/null; then + FILE_TO_PRINT="$filename_print" + PRINT_OPTIONS="-o PageSize=Postcard.Borderless" + log_info "Image preparee: 2114x1418 (overscan+roll) → $filename_print" else - # ── MODE B : overscan 5% + fullbleed fill ─────────────────────────── - # Image légèrement agrandie (5% overscan) pour que la Selphy en mode - # Fullbleed puisse rogner les bords sans laisser de marges blanches. - # print-scaling=fill remplace le raw mode et laisse le driver gérer - # l'alignement — élimine les bordures noires de l'ancien script. - if convert "$filename" \ - -resize 1860x1240 \ - -gravity center \ - -background white \ - -extent 1860x1240 \ - -quality 95 \ - "$filename_print" 2>/dev/null; then - FILE_TO_PRINT="$filename_print" - PRINT_OPTIONS="-o media=Postcard.Fullbleed -o print-scaling=fill" - log \ No newline at end of file + log_error "Echec convert — impression de l'original" + FILE_TO_PRINT="$filename" + PRINT_OPTIONS="-o PageSize=Postcard.Borderless" + fi +fi + +# --- Selection de l'imprimante (load balancing) --- +printer_1_status=$(lpstat -p "$PRINTER_1" 2>/dev/null || echo "not found") +printer_2_status=$(lpstat -p "$PRINTER_2" 2>/dev/null || echo "not found") + +SELECTED_PRINTER="" + +if [[ "$printer_1_status" == *"idle"* ]]; then + SELECTED_PRINTER="$PRINTER_1" + log_info "Imprimante selectionnee: $PRINTER_1 (idle)" +elif [[ "$printer_2_status" == *"idle"* ]]; then + SELECTED_PRINTER="$PRINTER_2" + log_info "Imprimante selectionnee: $PRINTER_2 (idle)" +else + jobs_1=$(lpstat -o "$PRINTER_1" 2>/dev/null | wc -l) + jobs_2=$(lpstat -o "$PRINTER_2" 2>/dev/null | wc -l) + + if [ "$jobs_1" -le "$jobs_2" ] 2>/dev/null; then + SELECTED_PRINTER="$PRINTER_1" + else + SELECTED_PRINTER="$PRINTER_2" + fi + log_info "Aucune imprimante idle, file sur: $SELECTED_PRINTER (P1=$jobs_1 jobs, P2=$jobs_2 jobs)" +fi + +# --- Impression --- +log_info "Impression x${copies} sur $SELECTED_PRINTER [mode ${TEST_MODE}]: $FILE_TO_PRINT" + +job_output=$(lp -n "$copies" -d "$SELECTED_PRINTER" $PRINT_OPTIONS "$FILE_TO_PRINT" 2>&1) +lp_exit=$? + +if [ $lp_exit -ne 0 ]; then + log_error "lp a echoue (exit $lp_exit): $job_output" + echo "PRINT_ERROR:${SELECTED_PRINTER}:lp_failed" + [ -f "$filename_print" ] && rm -f "$filename_print" 2>/dev/null + exit 1 +fi + +# Extraction du job ID (ex: "request id is Selphy_Blanche_WiFi-42 (1 file(s \ No newline at end of file