라즈베리파이 매직미러 MagicMirror 설치 및 이미지/영상 동시 슬라이드쇼 모듈 제작 후기#1

라즈베리파이 4B 4gb에 PiOS가 설치된 환경에서 MagicMirror를 설치한 후 사진과 영상을 모두 백그라운드에서 슬라이드쇼할 수 있는 모듈 설치하는 것 까지 정리한 후기다.

Magic Mirror 공식 3rd Party Modules (링크)에 사진과 영상을 동시에 슬라이드쇼로 노출하는 모듈은 없어서 Chat-GPT와 함께 시행착오 겪으면서 완성했다. 따라서 아래에 설명되는 모듈은 Magic Mirror 깃헙에는 없다.

매직미러(Magic Mirror) 설치 배경

이미 몇년전부터 전자앨범을 DIY로 제작하여 활용 중이었고, Dak Board와 Magic Mirror 모두 운영해보았지만, 최근 1년동안은 화면이 꺼진채로 방치되었다.

아이들 어릴적 사진들만 몇년동안 디스플레이하다가 멈추게된 건데, 이제 아이들이 초등학교 고학년이 된 만큼 새단장을 하고 싶더라. 최근 사진들로 말이다.

그리고 Dak Board 와 Magic Mirror 장단점이라고 해야 하나?
활용도에 따라 다를텐데, 전자앨범의 기본-사진 슬라이드쇼만 되어도 충분하다면 Dak Board 가 편하다. 다양한 기능이나 정보를 출력하겠다는 목적이 있다면 Magic Mirror로 가야겠지만, 손재주가 좀 있어야 하겠지.

어쨌든 Dak Board, Magic Mirror 모두 Google Photo API가 보안문제로 막히는 바람에 평소 Google Photo와 연동해서 사용했던 나는 다른 방법을 찾아야 했고, Dak Board를 활용한 우회 방법보다는 (관리의 어려움과 귀찮음이 있겠지만) 자유도가 높은 Magic Mirror를 선택했다.

라즈베리파이 PiOS 설치

라즈베리파이 4B에 PiOS를 설치한 환경이다. 2025년 9월 기준 업데이트된 버전으로 아래와 같으며, USB3 포트에 SSD 연결해서 OS를 설치했다.

eeprom 도 업데이트했다.
2년 전쯤에 eeprom을 업데이트한 적이 있는데, 무슨 버그인지, 부팅 이후 7~10일 정도에 어김없이 하드웨어가 다운되더라고. 이번 버전은 아직 7일 이상 테스트 해본 적은 없어서 더 두고봐야한다.

Magic Mirror 설치

node.js 설치

가장 먼저 node.js를 설치해야한다. 이미 설치되어 있을 수도 있지만, 업데이트나 설치나 과정이 별반 차이가 없으니, 그냥 설치하는 것으로 한다.

https://nodesource.com/products/distributions 에 설치 명령어가 있다.
보통 curl은 이미 설치되어 있을테지만, 아닌경우도 많으니 순서대로 진행하면 되며, 마지막 node -v 는 버전확인 명령어다.

Magic Mirror 다운로드 및 설치

역시 공식 페이지에 잘 설명되어 있다. 아래 URL 의 가이드대로 진행하면된다.
https://docs.magicmirror.builders/getting-started/installation.html#manual-installation

그리고 config.js 파일을 복사하는 단계가 있는데, 최초 설치 시 config 디렉토리에 config.js.sample 파일만 있는데, 이를 복사해서 config.js로 붙혀넣는다. 기존 sample 파일은 백업본으로 유지하면 된다.

실행하면 config.js의 default 설정 그대로 MagicMirror 화면이 뜬다.

여기까지 작업하면 Magic Mirror는 설치된 샘이다.
다만, 전자앨범 역할 중 가장 중요한 백그라운드에서의 슬라이드쇼를 해결해야하는데, 보통은 Magic Mirror 공식 Github에서 리스팅하는 3rd Party Modules을 활용해도 되지만, 내가 원하는 Module이 없다.

프로세스 관리를 위해 pm2 설치 및 Magic Mirror 등록하기

https://docs.magicmirror.builders/getting-started/installation.html#manual-installation 가이드를 살펴보면 Magic Mirror를 시작하는 방법은 다양하지만 pm2로 관리하는 것이 편하다. 데몬가 프론트에서 시작되면 다른 관리를 할 수 없지만, pm2로 백그라운드 실행되면 로그확인, 파일수정, 재실행/정지 등 관리가 편하다.

PM2 설치하기
실행환경 파일 만들기

home/jay 디렉토리에서 nano로 작성/저장했다. 해당 디렉토리가 부팅시 default 위치이므로 가장 편하다.

PM2로 환경모듈 시작하기
재부팅시 자동 실행 설정하기

아래와 같이 진행되니 참고하자. 재부팅하면 백그라운드에서 Magic Mirror가 실행된다.

자주 사용하는 pm2 명령어

MMM-MediaBackground 모듈 제작

이미 언급한대로 3rd Party Modules에는 이미지 슬라이드 쇼 모듈은 있지만, 이미지와 영상을 함께 슬라이드쇼할 수 있는 모듈은 없다. 그래서 Chat-GPT와 함께 제작을 했는데, 우여곡절이 있었지만 결국 잘 구현되었다.

디렉토리 구조

구조를 설명하기 위한 그림인데, 설명을 위해 필요한 디렉토리와 파일만 정리한 것이다.
MMM-MediaBackground 모듈을 구현하기 위해 신규 디렉토리와 파일을 만들고, config.js를 약간 수정하면 완성이다. 아주 간단하다.

MMM-MediaBackground 모듈

위 구조에서 신규로 생성해야 할 디렉토리를 만들고, 아래 3개 파일을 작성/저장하면 된다.
나는 주로 nano를 사용한다.

MMM-MediaBackground.js

MMM-MediaBackgroud.css

node_helper.js

디렉토리 생성/심볼릭 링크와 권한설정

기본적으로 Module은 Module 디렉토리에 안에서 운영되므로 Module 디렉토리 밖의 파일을 불러오기 위해서 아래와 같이 Pictures, Videos 디렉토리의 권한을 설정하고, 해당 파일들은 module 디렉토리에 MMM-MediaBackground에서 원활하게 읽을 수 있도록 심볼릭 링크로 이어주는 작업을 해야 한다. (물론 다른 방법도 있을텐데, Chat-GPT와 계속된 오류를 잡으면서 도달한 방법이 이러했다.)

config.js에 모듈 추가

config.js 에는 default 모듈들이 여럿있는데, 맨 아래에 추가하면 된다.
처음 접하면 어려울 수 있으니, 파일로 첨부해 놓자. (config.js, MMM-MediaBackground.js, MMM-MediaBackground.css, node_helper.js 모두 압축해서 업로드했으며, config.js는 default에서 모듈만 추가했음)

마무리 설정하기 및 참고사항

모든 것들이 잘 실행되지만, 몇가지 추가로 설정해야 할 부분들이 있다.

로컬 SSD가 아닌 NAS 로 변경한다면?

어차피 구글 포토에서 다운로드 받은 이미지와 영상 파일을 활용하는 것이 가장 편할 것 같아서 SSD를 그래도 사용하고, FTP 혹은 SMB로 파일 관리할 생각이다.
다만, 혹시라도 NAS를 활용하게 될지도 모르지 미리 Chat-GPT의 1차 답변을 링크한다.

참고: 테스트 중에 이미지/영상 파일 업로드는 ssh 접속 툴로 사용중인 MobaXterm을 통해서 업로드함.

영상 파일 포멧/코덱 변환하기

구글 포토에서 영상을 다운로드 받으면 HEVC(H.265) / VP9 / HDR / VFR 같은 형식일 수 있는데, 크로미움에서는 재생이 안되고 검정화면만 보일 수 있다. ffmpeg를 이용해서 H.264 + AAC, 1080p 코덱/포멧으로 변경하자.

ffmpeg 설치 및 코덱확인

변환하기 (단일 파일)

  • scale=’min(1920,iw)’:-2 → 1920 너비 이상이면 1080p로 맞춤
  • fps=30 → VFR(가변 프레임) → CFR(30fps 고정)으로 변환
  • libx264 -crf 23 → 품질 23(낮을수록 화질↑ 용량↑, 보통 18~28)
  • -movflags +faststart → 웹/스트리밍에서 바로 재생되게

변환하기 (디렉토리 내 파일 일괄)

그리고 추가로 변환속도 조절을 위해 참고해놓자. 실제로 라즈베리파이에서 변환하기 시간이 많이 걸리더라고. 화질을 조금 낮추고 속도를 올리는게 이득이다.

  • -preset veryfast를 ultrafast로 바꾸면 속도↑, 용량 조금 더 커집니다.
  • 720p까지만 쓰려면 scale=’min(1280,iw)’:-2 로 바꾸면 더 가볍습니다.

슬라이드쇼 인터벌 조정하기

config.js 파일의 slideInterval, fadeSpeed, maxDurationMs 을 조정하면 된다.

직결된 모니터 세로 출력으로 변경하기

전자액자 실물은 세로형으로 벽에 걸려있어서 PiOS화면 출력도 세로로 변경해야 한다.
요즘은 Desktop 화면 시작 메뉴에 Screen Configuration 메뉴가 있어서 UI에서 직접 설정도 가능해서 파일을 굳이 건드릴 필요는 없다.


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다