원문 캡처 · github.com
원문 캡처 · github.com

google-photo-wallpaper는 비공개 Google Photos 앨범의 사진을 Windows에 내려받아 콜라주 배경화면으로 만들고, 여러 모니터에 같은 이미지를 표시하는 비공식 커뮤니티 프로젝트다. 사진을 지정된 로컬 폴더에 저장해 John’s Background Switcher(JBS)나 다른 배경화면 도구에서 사용할 수도 있다.

이 프로젝트는 문서화되지 않은 Google Photos 웹 엔드포인트를 사용한다. Google이나 JBS와 제휴하거나 이들의 승인을 받은 프로젝트가 아니며, 엔드포인트와 로그인 동작은 예고 없이 바뀔 수 있다. 사용에는 Google의 해당 약관이 적용된다. 시간당 사진 50장 제한은 구현상의 한도일 뿐 Google이 허가한 사용량을 뜻하지 않는다.

기능과 사진 관리

비공개 앨범을 링크 공유로 전환하지 않고 선택할 수 있다. 사용자가 직접 로그인한 뒤 전용 Chrome 프로필을 재사용한다. 사진 내려받기는 처음 실행, 수동 새로고침, 실패, 필터링된 사진을 모두 포함해 이동하는 1시간 기준 최대 50회 시도까지 허용한다. 누락된 시간의 할당량을 나중에 한꺼번에 내려받는 기능은 없다.

기본적으로 로컬 사진을 최대 500장 보관한다. 새 사진이 정상적으로 도착한 뒤 오래된 사진을 교체하며, 원본 JPEG 저장 공간의 기본 한도는 1GiB다. 과거 같은 시기의 사진을 7일 이내 범위에서 30% 섞을 수 있다. 해상도가 충분한 사진을 우선하고 거의 빈 프레임과 보수적인 기준의 유사 사진을 제외한다. 미적 평가 모델이나 외부 이미지 분석 서비스는 사용하지 않는다.

콜라주는 크기와 각도, 겹침이 서로 다른 사진 인화물을 흩어 놓은 형태로 만든다. 흰 테두리는 부드럽게 처리하고 그림자와 바깥 여백을 둔다. 콜라주당 사진 수와 배경화면 변경 간격을 설정할 수 있으며 기본값은 각각 20장과 10분이다. 완성된 이미지 전체를 각 모니터에 따로 맞춰 표시하며, 한 이미지를 모니터 여러 대에 걸쳐 늘이지 않는다. 앱이나 시스템 트레이 메뉴에서 배경화면을 새로고침할 수 있다. 사진 내려받기와 배경화면 설정은 별도 탭으로 나뉜다.

Windows 설치와 첫 설정

설치 프로그램은 Windows 10/11 x64용 google-photo-wallpaper-0.2.0-windows-x64-setup.exe다. 최신 Releases에서 내려받아 실행한 뒤 시작 메뉴에서 Google Photos Wallpaper를 연다. Python과 필요한 라이브러리가 포함되어 있어 터미널이나 설정 스크립트가 필요 없다.

설치 프로그램은 관리자 권한 없이 현재 사용자 계정에 설치하며 기본 설치 위치는 %LOCALAPPDATA%\Programs\GooglePhotoWallpaper다. 비공개 설정 파일은 %LOCALAPPDATA%\GooglePhotosWallpaper\config.json에 저장한다. Chrome이 설치되어 있어야 한다. 설정 파일에서 browser_channel: "msedge"를 지정하면 Edge를 선택할 수 있다. 사용자가 직접 Google에 로그인하고 앨범을 고른 뒤, 처음에는 소량의 사진을 내려받는다. 이후 앱에서 시간당 다운로드를 켜고 배경화면을 설정한다.

초기 설치 프로그램은 코드 서명되지 않았다. GitHub 릴리스에는 SHA-256 체크섬, 소스 코드, 의존성 고지와 대응하는 LGPL 트레이 라이브러리 소스가 포함된다. 제거는 Windows의 설치된 앱 목록에서 할 수 있으며, 비공개 설정과 사진, 브라우저 데이터는 보존된다. 업그레이드하거나 제거하기 전에 앱을 닫아야 한다.

SignPath Foundation 신청서는 2026년 10월 31일 제출됐으며 승인을 기다리는 중이다. 현재 릴리스는 서명되지 않았다. 승인 역할과 빌드 검증, 서명 상태는 코드 서명 정책에서 확인할 수 있다. 네트워크 사용과 로컬 데이터 처리는 개인정보 보호 정책에 설명되어 있다.

소스에서 실행

소스 실행에는 Tkinter가 포함된 Python 3.12 이상과 설치된 Chrome이 필요하다. python.org에서 Python을 설치할 때 Python을 PATH에 추가하는 옵션을 선택한다. 필요하면 Chrome도 설치한다. Releases에서 소스 ZIP을 내려받아 계속 사용할 폴더에 압축을 풀거나 저장소를 복제한다.

  • Setup.cmd를 실행한다. 격리된 .venv를 만들고 의존성을 설치한 뒤 비공개 config.json을 생성한다. 설정 중에는 인터넷 연결이 필요하다.
  • Start-App.cmd를 연다.
  • Photo downloader 탭에서 Sign in to Google을 누른다. 별도로 열린 Chrome 창에서 직접 로그인한다. Photos 라이브러리가 표시되면 브라우저 창을 닫아 앱이 저장된 세션을 확인하고 재사용하도록 한다.
  • 앨범을 불러와 선택하고 Save downloader settings를 누른다. Download photos now로 먼저 소량을 내려받은 뒤 Enable hourly downloads를 켠다.
  • Wallpaper 탭에서 레이아웃, 콜라주당 사진 수, 변경 간격을 설정한다. Apply settings & generate를 누른다. 4K 세트를 준비하는 데 몇 분이 걸릴 수 있다. 다른 배경화면 프로그램과 업데이트가 겹치지 않도록 JBS나 다른 프로그램을 일시 중지한다.

배치 파일 대신 PowerShell로 설정하려면 다음 명령을 실행한다. 실행 정책 우회는 해당 설정 프로세스에만 적용된다.

powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Setup.ps1

AI 도우미를 이용해 설치할 경우 저장소와 에이전트 설치 안내서를 제공할 수 있다. 의존성 설정과 검사, 예약 작업은 스크립트로 처리할 수 있지만 Google 로그인과 앨범 선택은 사용자가 직접 해야 한다.

예약 작업과 배경화면 갱신

앱은 서로 독립적인 두 작업을 실행한다. 사진 내려받기는 기본적으로 매시간 선택한 앨범을 확인해 남은 시간당 허용량만큼 내려받기를 시도한다. 배경화면 전환은 기본적으로 10분마다 이미 생성된 로컬 이미지를 골라 모든 모니터에 적용한다.

Windows 작업 스케줄러가 사용자가 로그인해 있는 동안 두 작업을 실행하므로 앱 창을 닫아도 작업은 계속된다. Windows 기본 배경화면 슬라이드쇼에는 의존하지 않으며, 잠자기 상태의 컴퓨터를 깨우지는 않는다. 놓친 다운로드 주기가 대량 다운로드를 위한 누적 허용량으로 바뀌지도 않는다.

시간당 작업은 로컬 사진을 이용해 준비된 콜라주 세트를 새로 만든다. 배경화면 새로고침은 Google에 접속하지 않고 준비된 이미지 가운데 다른 이미지를 즉시 적용하며, 저장 대기 중인 설정은 반영하지 않는다. 콜라주 설정을 바꾼 뒤에는 Apply settings & generate를 눌러야 한다. 앱은 시스템 트레이로 최소화할 수 있으며, 창의 X를 누르면 창만 닫힌다.

Windows 로그인 때 앱을 시작하려면 다음 스크립트를 실행한다.

powershell
.\scripts\Install-Startup.ps1

작업 이름과 로그, 제거 방법은 Windows 예약 및 제거 안내를 참고한다. 나중에 앱 폴더를 옮기면 예약 작업과 시작 바로 가기가 새 경로를 가리키도록 바꿔야 한다.

저장 공간과 설정

기본 경로는 현재 Windows 사용자에게만 해당한다.

데이터기본 경로
JBS에서 사용할 수 있는 내려받은 사진%LOCALAPPDATA%\GooglePhotosWallpaper\cache\photos
브라우저 세션%LOCALAPPDATA%\GooglePhotosWallpaper\browser
생성된 배경화면%LOCALAPPDATA%\GooglePhotosWallpaper\wallpapers

경로와 고급 옵션은 비공개 config.json에서 변경할 수 있다. 예시는 config.example.json에서 볼 수 있다. 기존 설치는 저장된 경로를 유지한다. 브라우저 프로필과 사진 캐시는 서로 다른 폴더에 둬야 한다. 사용자 지정 캐시 디렉터리를 쓰면 배경화면 출력 폴더도 별도로 사용하며, 앱의 Wallpaper 탭에 실제 경로가 표시된다. 개발자 컴퓨터의 경로는 기본값으로 사용하지 않는다.

활성 배경화면은 최대 20개이며, 세트를 교체하는 동안 이전 세트도 남는다. 생성된 JPEG는 최대 40개이고, 정상적으로 생성된 두 세트 전체의 크기는 약 64MiB로 제한된다. 콜라주 하나에는 설정한 사진 수까지 들어간다. 이 한도는 원본 사진 캐시와 별개다. 브라우저 데이터, 설치된 의존성, 로그도 각각 별도로 저장되며 작업별 로그는 합계 2MiB에서 순환 기록된다.

배경화면 사본은 이미지 비율을 유지하고 원본의 EXIF/GPS 정보를 제외한다. 사진 인화물의 겹침으로 사진 일부가 가려질 수 있다. 레이아웃은 기하학적 배치를 이용하며 얼굴 인식은 하지 않는다. 기본 사진 필터는 문서, 민감한 사진, 눈을 감은 사진, 개인적으로 중요한 사진을 알아보지 못한다. 적절한 앨범을 선택해야 한다. Google Photos의 사진은 수정하거나 삭제하지 않는다.

인증과 한계

처음 로그인할 때는 별도 프로필을 사용하는 일반 Chrome을 연다. 이후 백그라운드에서 읽을 때는 Chromium 샌드박스를 켠 상태로 해당 프로필을 헤드리스 방식으로 사용한다. 세션 쿠키는 브라우저 컨텍스트 안에 남는다. 앱이 허용하는 Google Photos RPC는 앨범 목록과 앨범 내용 조회, 두 가지 읽기 전용 요청뿐이다. 로그인이 만료되면 다시 로그인을 요청하기 전에 조용한 세션 갱신을 한 번 시도한다.

Google은 2025년 3월 공식 Photos API에서 광범위한 서드파티 라이브러리 접근을 제거했다. 이 프로젝트는 웹사이트의 문서화되지 않은 인터페이스를 사용하므로 작동이 중단되거나 요청이 거부될 수 있다. 요청 제한이 계속된 접근이나 계정 안전을 보장하지는 않는다. 인증이나 네트워크에 문제가 생겨도 이미 로컬에 저장된 사진은 계속 사용할 수 있다.

테스트는 합성 이미지와 모의 응답을 사용한다. 테스트 통과가 Google의 현재 웹사이트에서 이 연동을 받아들인다는 증거는 아니다. 참고 자료는 Google API 변경 사항, Google 약관, NotebookLM 클라이언트의 세션 지속 방식이다.

개발과 라이선스

테스트와 명령행 도구는 다음 명령으로 실행한다.

.\.venv\Scripts\python.exe -m unittest discover -s tests -q
.\.venv\Scripts\python.exe -m photo_cache --help
.\.venv\Scripts\python.exe -m photo_cache status

테스트와 개인정보 보호 요구사항은 기여 안내에 설명되어 있다. 보안 취약점은 SECURITY.md의 안내에 따라 비공개로 신고해야 한다. 공개 이슈에 브라우저 프로필, 쿠키, 비공개 앨범 링크, 개인 사진, 가리지 않은 로그를 첨부해서는 안 된다.

프로젝트 자체 코드는 MIT 라이선스를 따른다. 의존성은 각자의 라이선스를 유지하며 자세한 내용은 제3자 고지에서 확인할 수 있다. Chrome과 JBS는 포함되지 않는다. 설치 빌드에는 런타임 라이선스가 유지되며, LGPL 트레이 라이브러리는 교체 가능한 소스로 제공된다. 자세한 내용은 Windows 빌드 안내에 있다.