fix: auto-detect missing TTY and fall back to auto mode

When stdin has no TTY (Docker without -it), IntPrompt/Confirm raise
EOFError and crash the container into a restart loop. Treat a non-TTY
stdin the same as AUTO_MODE=true so headless runs work without any env
var configuration.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 14:48:46 +00:00
co-authored by Claude Sonnet 4.6
parent 196b0a5147
commit 99185c2da9
+7 -2
View File
@@ -2,6 +2,7 @@
import logging import logging
import os import os
import sys
from rich import print as rprint from rich import print as rprint
from rich.prompt import Confirm from rich.prompt import Confirm
@@ -63,14 +64,18 @@ def main() -> None:
rprint("[bold red]Could not fetch people from Immich. Check URL/Key.[/bold red]") rprint("[bold red]Could not fetch people from Immich. Check URL/Key.[/bold red]")
return return
# Check for non-interactive mode # Check for non-interactive mode; also force auto when stdin has no TTY
auto_mode = os.environ.get("AUTO_MODE", "false").lower() == "true" # (e.g. Docker without -it) to avoid an EOFError crash
auto_mode = os.environ.get("AUTO_MODE", "false").lower() == "true" or not sys.stdin.isatty()
dry_run = os.environ.get("DRY_RUN", "false").lower() in ("true", "1", "yes") dry_run = os.environ.get("DRY_RUN", "false").lower() in ("true", "1", "yes")
if dry_run: if dry_run:
rprint("[bold yellow]DRY RUN — no images will be downloaded or uploaded[/bold yellow]") rprint("[bold yellow]DRY RUN — no images will be downloaded or uploaded[/bold yellow]")
if auto_mode: if auto_mode:
if not sys.stdin.isatty() and os.environ.get("AUTO_MODE", "false").lower() != "true":
rprint("[dim]No TTY detected — running in auto mode. Set AUTO_MODE=true to suppress this.[/dim]")
else:
rprint("[bold cyan]Running in AUTO mode (non-interactive)[/bold cyan]") rprint("[bold cyan]Running in AUTO mode (non-interactive)[/bold cyan]")
jobs = auto_configure(people) jobs = auto_configure(people)
else: else: