
いま流れている曲をテレビや余った液晶に大きく映したい。ラズパイでこれをやろうとすると、まずデスクトップ環境が立ち上がり、ブラウザーを開いて全画面にして、マウスカーソルを画面の外へ追いやる作業が要る。安価なRaspberry Pi Zero 2 Wでは、その土台を動かすだけで処理能力の大半を持っていかれる。
th3-hollow氏が公開した「NowFrame」は、この手順ごと取り払う。デスクトップ環境を使わず、Pythonで描いた絵をLinuxのフレームバッファへ直接書き込む。電源を入れれば1920×1080の表示画面がそのまま立ち上がり、曲名とアーティスト名、アルバムのジャケットが並ぶ。背景はジャケットから抜き出した色でぼかして作り、周囲にはその色に合わせた光をにじませる。曲が変わるときは前後の画面を溶け合わせる。
いちばん手を焼いたのは処理速度だという。Pi Zero 2 Wは、1080pの背景を生成し、ジャケットから色を取り出し、画面を組み立て、16ビットのRGB565という形式に変換して書き出すところまでを1台でこなす。曲が丸ごと切り替わる場面では、準備に2〜3秒かかる。そこで再生位置のバーだけが動く場面では、画面全体を作り直さず必要な区画だけを書き換える。部分更新だけに絞れば毎秒16〜17コマで動く。
Spotifyへの問い合わせ回数も設計の対象になった。当初は2秒ごとに再生状況を尋ねていたが、開発者向けの利用枠をすぐ使い切ってしまう。そこで再生位置は手元で時間を数えて進め、問い合わせは再生中なら10秒、一時停止なら30秒、待機中なら60秒に1回まで減らした。制限にかかった場合は、Spotifyが返す待機時間の指示に従う。ジャケット画像も、いったん一時ファイルへ落としてPillowで壊れていないか確かめてから、キャッシュへ差し替える。描画中の画像を書き換えて画面が崩れるのを避けるためだ。
導入はリポジトリを取得してインストール用のスクリプトを走らせるだけで、専用のサービスアカウントと仮想環境、systemdの起動設定までが作られる。動作を確かめてあるのはPi Zero 2 WにDietPiとPython 3.13を載せた構成で、他の機種や解像度は未検証だと本人が断っている。ライセンスはMITとしている。なお音を鳴らす機能はなく、別の機器で再生している内容を映すだけの装置になる。手持ちの古いモニターを音楽用のディスプレイに変えたい人には、そのまま使える作りだろう。

