今さらだけど、ダイナミックデスクトップ作ってみた

macOS Mojave がリリースされてからほぼ一年。新しい OS もそろそろって時に今さらだけど、Mojave の目玉だったダイナミックデスクトップを作ってみた。

参考にしたサイトさま

手順についてはここに記すまでもない。
 以下の記事が詳しい。
 執筆者さまに感謝しつつ、リンクを掲載させていただく。

🔗 ☀️ダイナミックデスクトップ壁紙 – みずぴー日記

🔗 【Mojave】弊社猫社員のダイナミックデスクトップを作成する – Qiita

ダイナミックデスクトップの作成には、XCode や wallpapper のインストール、同じ大きさの画像 16 枚と json で書く定義ファイルが必要だ。
 上の記事の手順に従ってやれば案外やすやすと作れてしまう。

筆者がつけくわえることはない。ないけど、ひとつだけ。
 定義ファイルの書き方である。
 自分で書かなくても、上記リンク Qiita の記事には、おそらくデフォルトのモハベ砂漠の定義ファイルと思われるものが掲載されているので、それをコピペすればいい。
 それをせず、あえて自分で書くなら、という話である。

ダイナミックデスクトップの定義ファイルを作る

問題の json ファイルは以下のように作る。

[
  {
    "altitude": -49.18,
    "azimuth": 6.96,
    "fileName": "1.png",
    "isPrimary": true,
    "isForLight": false,
    "isForDark": true
  },
  {
    "altitude": -42.20,
    "azimuth": 37.77,
    "fileName": "2.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },

 -- 中略 --

  {
    "altitude": -34.88,
    "azimuth": 308.01,
    "fileName": "15.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": -46.44,
    "azimuth": 333.63,
    "fileName": "16.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  }
]

fileName は画像のファイル名。
isPrimary はファインダーの表示に使う画像、みたいなことだと思う。true に設定してもなにも変化ないのでよくわからない。
isForLight はライトモードで使う静止画。
isForDark はダークモードで使う静止画。

問題は altitude と azimuth とかいうやつ。

altitude は太陽の仰角。
azimuth は太陽の方向。

らしい。仰角とか方向とかなんなん? どうやって調べるん?
 という話だ。
 太陽の仰角と方向は以下のサイトで調べられる。

🔗 太陽高度(一日の変化) – 高精度計算サイト

googlmap というボタンを押して自分の住んでいる場所を選択する。
 必要なら日付を変更して「計算」というボタンを押せば、ずらっと数字があらわれる。
 十五分おきの太陽高度と太陽の方角を出してくれる。

一時間を 4 分割して 24 時間分だから、数えてないけど 96 の欄があるはず。必要なのは 16 個分なので、96 を 16 で割ると 6。

つまり最初の欄からはじめて、6 個おきに数字をとっていけば、満遍なく太陽高度が取得できていい感じになるはず。

json ファイル

筆者の住んでいる北関東のクソ田舎で恐縮だが、上述の方法で json ファイルを作ると以下のようになった。日付は 2019 年 9 月 13 日金曜日である。

📝 info.json

[
  {
    "altitude": -49.18,
    "azimuth": 6.96,
    "fileName": "1.png",
    "isPrimary": true,
    "isForLight": false,
    "isForDark": true
  },
  {
    "altitude": -42.20,
    "azimuth": 37.77,
    "fileName": "2.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": -28.54,
    "azimuth": 59.81,
    "fileName": "3.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": -11.80,
    "azimuth": 75.84,
    "fileName": "4.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": 6.21,
    "azimuth": 89.46,
    "fileName": "5.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": 24.04,
    "azimuth": 103.52,
    "fileName": "6.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": 40.72,
    "azimuth": 121.45,
    "fileName": "7.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": 53.58,
    "azimuth": 148.90,
    "fileName": "8.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": 57.21,
    "azimuth": 188.49,
    "fileName": "9.png",
    "isPrimary": false,
    "isForLight": true,
    "isForDark": false
  },
  {
    "altitude": 49.02,
    "azimuth": 223.87,
    "fileName": "10.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": 34.10,
    "azimuth": 246.55,
    "fileName": "11.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": 16.70,
    "azimuth": 262.33,
    "fileName": "12.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": -1.19,
    "azimuth": 275.84,
    "fileName": "13.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": -19.03,
    "azimuth": 290.04,
    "fileName": "14.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": -34.88,
    "azimuth": 308.01,
    "fileName": "15.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": false
  },
  {
    "altitude": -46.44,
    "azimuth": 333.63,
    "fileName": "16.png",
    "isPrimary": false,
    "isForLight": false,
    "isForDark": true
  }
]

仰角 altitude の値が一番小さいのが真夜中(ファイル名でいえば最初の 1.png)、一番大きいのが正午(ファイル名でいえば 9.png)くらいじゃないかな、と考えて以下のような画像を作成した。

この画像と json ファイルをひとつのフォルダに収め、Homebrew でインストールした wallpapper でダイナミックデスクトップを作成する。事前に Xcode をインストールしていないとエラーが出る。

wallpapper -o ~/アウトプットパス/test.heic -i ~/インプットパス/info.json

出来上がった heic は、デフォルトではMacintosh HD/ライブラリ/Desktop Picturesに入れるものらしいけど、システム環境設定で指定してやれば、別にユーザの Pictures フォルダとかに置いても動く。

試してみた結果、24 時間監視してたわけじゃないけど、だいたい良さげに動いている。
 これは Mac のほうで太陽の方角とか高度とか、季節によって計算してるんだろうか。
 よくわからない。

ダイナミックデスクトップのダウンロード

作るのダリぃという向きには、以下のサイトさまでダウンロードできる「君の名は」のやつとかをおすすめしたい。

🔗 Dynamic Wallpaper Club

ふつうに出来がいい。