🔥

ギークたち、サブスクから脱却せよ。画像・動画・音声のクラウド化は、メディアサーバーで。【immich・Jellyfin】

に公開

はじめに

この記事では、以下のOSSの紹介が主である。どこの馬の骨ともわからない人間の記事が読みたくなければ、公式の記事やドキュメントを参照されたい。

VRChatの布面積少なめな写真がクラウドにあげられてBANされたら困るひと向けでもある。
alt text
うーん健全!

immich (画像・動画特化メディアサーバー)

本記事の運用では、「画像」と「動画」のクラウド化を担当する。
https://immich.app/

Jellyfin (汎用メディアサーバー)

本記事の運用では、「音声」のクラウド化を担当する。
https://jellyfin.org/

SpotifyやAmazon Primeの学生料金って4年で終わるんだね

「許せねぇ。一生学生気分でいたい。あと中学・高校生・大学院生は学生じゃないんですか?これだからGREATな国の考えることは...。お金ない...。というか一生搾取され続けるんですか?許されない...。」

そんなことを愚鈍にも思っていた人間には、技術力とインターネットのパワーがありました。

「せや、自分でホストすればええやんけ!」

メディアサーバーとは、画像や動画、音声などのメディアファイルを管理・配信するためのサーバーソフトウェアである。(GitHub Copilot)

おたくに眠っているPCがあればなんとかなりまっせ。デスクトップPCつけっぱならそれでもええんとちゃいます?(ChatGPT・エセ関西弁要約)

ほう.......................

意義

  • クラウド系サブスクから解放される。
    全ては己の手の中。責任とデータ損失・セキュリティリスクが伴う。大いなる力にはなんとやらだ。もちろんサービスに支払う金額はない。あるのは初期費用と運用費用(電気代)がほとんどではないか。普段デスクトップPCをつけっぱなしにしている諸君には微々たるものであろう。しかしね、アップロードが簡単なのにダウンロードがし辛いとか、あとから規約変えてくるとかBANしてくるとか、そういう権力者のお気持ちに左右されづらくなりますよ。君はどちらを選ぶのかな?なおOSS開発者には頭が上がらないため出世払いならぬ出世開発あるいはそういう人間が幸せになれるように世界に貢献したく存じます。

  • たのしい。
    こういう初めてのこと勉強してやるのって楽しくないですか?!?!僕は楽しい。

運用準備

まずはあなたが、サーバーのためにどのような機材を使うのかが問題です。

  • 昔のノートPC・デスクトップPC
  • ミニPC
  • ラズパイ
  • クラウドサーバー契約する

などなど。環境によって手順は多分違います。今回はノートPCを使っており、容量を確保するために、外付けドライブをUSB接続しています。そのドライブに、画像等をぶち込むわけです。一旦テストするくらいならそこらへんのノートPCでいいでしょう。なんか転がっているでしょ?

さて、その端末に接続する際には、通信のためにIPアドレスを指定する必要があり、さらに外部からアクセスできるようにするには小難しいことがいろいろ...。セキュリティ的にも不安なのだ...。

そこで!

Tailscale

このVPNがあると、楽。安全。便利。というか雑に運用するなら肝。
https://tailscale.com/

基本どの環境でも入るはず。端末ごとにプライベートIPアドレス(100.x.x.x)を固定してあげて、そこにアプリ用のポート番号を付与して簡単に通信できるってわけ。なお、IPアドレスの固定には、Webサイトの管理画面で設定する必要があり、そうでなければ3ヶ月に1度(?)更新されてしまうようなので、気をつけたい。

そのようにして、安全なVPNが構築できたのであれば、次はどのサービスを選択するか、である。候補はChatGPTに聞いてほしい。自分が選んだ評価軸は以下。

  • OSS
  • クライアント(スマホなど、再生する側の端末)にアプリがあるなどして、使いやすい

結局いくら難易度の高い構築をしても、使いにくければただのゴミである。使いやすさこそ、日常使いの肝である。

導入は至極簡単なので略。サーバー(ノートPCなど)と、端末全てにいれておく。もちろんスタートアップをオンにしておく。

immich

使いやすさ、至高
ほぼGooglePhotosのOSS版といって差し支えない。見てくださいこの洗練されたUIと機能の数々を。

immich screenshot
どう見てもGooglePhotosです。本当にありがとうございました。

右下よく見ると115TiBとかいうイカれた数値ですね。楽しいね。


115TiB 中 82TiB 使用中ってお前...

これは誇張なしに最強。Alexさんにひれ伏せ。

導入するに際の環境依存が強い。Linuxがいいみたいですよ。自分はWindowsで動かすために、ドキュメント通りDocker Desktopを使って(※1)、Docker Composeしました。(※2)

※1 https://immich.app/docs/install/requirements
※2 https://immich.app/docs/install/docker-compose

おわり。端末側、特にスマホにはアプリを入れておきましょう。

Jellyfin

いろいろできるメディアサーバー。immichに比べればUIは劣るが、immichで音声が共有できないのであれば致し方ない.........。

Jellyfin screenshot
嫌いじゃないよ。そういうの。

これはWindowsなら.exeがあったたので導入は簡単。
詳細は: https://jellyfin.org/downloads

スマホアプリもあります。

ノートPC

勝手に電源が切れては困る。

  • コントロールパネルで、ハードウェアとサウンド > 電源オプション > プラン設定の編集 で、コンピューターをスリープ状態にする適用しないにしておく。

カバー閉じても起動しててよ。

  • 設定で、システム > 電源とバッテリー > カバー、電源とスリープ 個のボタンコントロール で、カバーを閉じると、PCが何も行わないにしておく。

さて、運用開始だ。

immich

immichでは、スマホアプリから自動でアップロードしてくれる。最高。もうAmazonPhotosとかGooglePhotosとか使う必要はないね。

でも、PCの写真はどうする?VRChatとかさ。AmazonPhotosはアプリがあって、それであげてくれるが、immichには現状ない。なので、immich CLIを使う。

https://immich.app/docs/features/command-line-interface

immich CLIはNode.js製なので、Node.jsをインストールしてから、npmでインストールする。nvmとか使ったほうがいいと思います。ここらへんは略。

また、immich CLIを使うには、immichサーバーのURLAPIキーが必要になる。APIキーは、immichのWeb管理画面で生成できる。一度登録してしまえば、以後は省略できる。

さて、PCの写真の話だが、VRChatの写真を例に取ろう。
以下WindowsならPowerShellで書いておこう。

immich.ps1
# [2025/09/12 更新]
immich upload --ignore "**/{202[2-4]-??,2025-0[1-8]}/**" --recursive --watch "C:\Users\YOURNAME\pictures\VRChat" --album-name "VRChat"
~2025/09/12 更新前の情報
immich.ps1
# [更新前] これも使えます。
immich upload --recursive --watch "C:\Users\YOURNAME\pictures\VRChat" --album-name "VRChat"

※更新後追加されたのは、--ignore "**/{202[2-4]-??,2025-0[1-8]}/**"
これを使うと、2022年から2025年8月までのフォルダを無視することができる。VRChatterの持つ鬼の枚数の画像でCPUをいじめないように。

  • --ignore アップロードしないファイル・フォルダを指定。
  • --recursive サブディレクトリ内のファイルも含めてアップロード
  • --watch 監視モード。新しいファイルが追加されたら自動でアップロード
  • --album-name アルバム名を指定

なので、この設定は「VRChatというアルバムに、C:\Users\YOURNAME\pictures\VRChat以下の写真をアップロードする、更新があってもちゃんと対応する」という意味になる。

多分に好みがあると思うので、公式ドキュメントを読め。最新情報が大事だ。AIじゃない、公式ドキュメントを読め!

上記ps1ファイルをタスクスケジューラに追加し、ログオン時に実行するようにすれば、PC起動時に自動でimmich CLIが起動し、VRChatの写真をimmichにアップロードしてくれる。最高。タスクスケジューラの使い方は略。

サーバーはDocker Desktopがスタートアップに登録されていれば、連鎖的に自動で起動するはず。

Jellyfin

jellyfinでは、音声ファイルを扱うが、曲・音楽のアルバム管理には一癖ある。公式ドキュメント(ex. Music)を参考にすると良い。immichのようにアプリケーションを通じてアップロードするというよりかは、指定したパスのフォルダを監視してくれる形式なので、自分でフォルダ内部の構造を整えてあげる必要がある。

つまり、仮にimmichが音声を扱えるとしたら、

  • immichに複数の音声ファイルが入ったフォルダと、保存してほしいアルバム名を渡すと、いい感じに内部で保存され、DB化され、表示の際にはアルバムでまとめて表示してくれたりする。(immichでは音声は扱えません!)
  • Jellyfinに渡すと、そのフォルダ構造(+メタデータ)に従って、アルバム・アーティストごとに整理してくれる。

といった違いがある。

Jellyfinを扱うときは、フォルダ構造・メタデータまで気にしてあげることが必要であることを強調しておく。

Jellyfinはアプリがサーバーで動くので、スタートアップができれば問題ない。

おわりに

以上!自分はVR展示以外で使わないノートPCが今や完全にメディアサーバー化してしまっている。GPUもついており、消費電力やばいかなぁと思っていたが、待機状態で20W程度なので、まぁ許容範囲だろう。我慢できなくなったらミニPCとかラズパイとか買うかも。

もし、電気代が気になる & そんな頻繁にアップロードもダウンロードもしないしなぁ & しばらくでかけない...

なら、一旦ノートPCの電源を切っておくのもいいでしょう。この構築法なら、再起動後、ログインしてデスクトップを開いてしまえば、すべて準備OKになりますから、あとはカバー閉じれば良い感じです。

Discussion