immich-app

Activity

Stars and mentions · Last 30 days, Oct 7 – Nov 5

GitHub stars2,021
Mentions41
0316293124Oct 7Oct 21Nov 5
UTC days · repositories immich-app owns5 repositories

Top repositories

immich-app’s repositories ranked by pull request authors, as on trending.

Loading

Contributes to

Repositories outside immich-app’s account where immich-app opened or reviewed pull requests in the past 365 days.

Who noticed immich-app

Everyone who starred or forked immich-app’s repositories since the archive began in 2011.

Notable accounts

Ordered by the stars their own repositories have received.

Biggest fans

Accounts that starred the most of these repositories.

Breakout weeks

Each repository’s best week of new stars, with the release published around it.

Mentions

41posts
Nov 60 posts
  1. 收藏:Immich——自己搭的「谷歌相册」:备份照片视频、人脸分类,数据在你家服务器。 不怕云盘涨价、不怕相册被清。 在意回忆归属权的,这条值得直接收藏。 Save: Immich — self-hosted Google Photos. Your memories, your server. immich-app/immich

    2 likes · 167 views
  2. Immich ML Privacy Issue: Microsoft Telemetry Enabled by Default via ONNX Runtime, Solution Needed !cover Introduction and Problem Statement Self-hosted software is increasingly adopted for its promise of enhanced privacy and data sovereignty. However, a critical vulnerability has emerged in Immich Machine Learning, a self-hosted photo processing application. The application’s integration of Microsoft’s ONNX Runtime library has inadvertently activated default telemetry, silently transmitting user data to Microsoft’s servers. This breach not only undermines the foundational principles of self-hosting but also raises urgent concerns about transparency and trust in open-source ecosystems. Technical Analysis Immich Machine Learning leverages ONNX Runtime, a high-performance library for machine learning inference. By design, ONNX Runtime enables telemetry by default, as explicitly stated in its privacy documentation. Upon deployment of Immich’s Docker container, this telemetry mechanism remains active, initiating DNS queries to Microsoft’s telemetry endpoint (mobile.events.data.microsoft.com). These queries occur during runtime, irrespective of whether the application processes sensitive data, such as personal photographs. The causal mechanism is clear: ONNX Runtime’s default telemetry setting triggers DNS queries to Microsoft’s servers, potentially exfiltrating user metadata. While Microsoft asserts that collected data is anonymized, the transmission of metadata from user-generated content directly contradicts the self-hosting ethos of retaining exclusive control over data. Critical Risks and Edge Cases For users processing sensitive or proprietary images, the risks extend beyond privacy invasion. If telemetry data includes metadata or cryptographic hashes of processed images, it could inadvertently expose intellectual property or personally identifiable information (PII). Furthermore, unblocked DNS queries serve as a red flag for network administrators, indicating unauthorized communication with external entities. Compounding the issue, Immich’s developers have yet to address the problem, despite it being reported in August. This delay risks normalizing privacy violations within open-source communities, where users expect proactive safeguards against such vulnerabilities. Mitigation Strategies To disable telemetry, users must explicitly set the environment variable ORT_DISABLE_TELEMETRY=1 within the immich-machine-learning container. This override directly suppresses ONNX Runtime’s default telemetry behavior, halting DNS queries to Microsoft’s servers. Additionally, isolating the container from external networks using Docker’s internal network feature prevents unintended outbound communication: - Step 1: Add the environment variable ORT_DISABLE_TELEMETRY=1 to the container configuration. - Step 2: Create an isolated Docker network: networks: immich-iso: internal: true driver: bridge - Step 3: Attach Immich containers to this isolated network, ensuring only the reverse proxy maintains external access. While these measures are effective, they place an undue burden on users to rectify a problem introduced by default configurations. The responsibility for ensuring privacy in self-hosted solutions must rest with developers, not end-users. Broader Implications This incident underscores a systemic issue in open-source software: the uncritical integration of third-party libraries without rigorous privacy audits. ONNX Runtime’s telemetry, though optional, is enabled by default—a design choice fundamentally at odds with self-hosting principles. If unaddressed, such practices will erode trust in self-hosted tools, driving users back to centralized services they sought to avoid. Immich’s case serves as a critical reminder for both developers and users. Transparency, proactive auditing, and respect for user autonomy must become non-negotiable standards in self-hosted software development. Until these principles are universally adopted, users must remain vigilant, treating every dependency as a potential vector for privacy breaches. Disabling Telemetry in Immich Machine Learning: A Privacy-Centric Approach Immich Machine Learning, a self-hosted photo processing application, integrates Microsoft’s ONNX Runtime library to optimize machine learning operations. However, this library activates telemetry by default, initiating DNS queries to Microsoft’s telemetry endpoint (mobile.events.data.microsoft.com). This default behavior contradicts the fundamental principle of self-hosting: retaining complete control over data and infrastructure. The following guide outlines precise steps to disable telemetry and fortify the isolation of your Immich deployment, ensuring compliance with privacy-first self-hosting practices. 1. Disabling Telemetry in ONNX Runtime Telemetry in ONNX Runtime is enabled by default, as explicitly stated in its privacy documentation. To deactivate this functionality, users must explicitly configure an environment variable within the immich-machine-learning container. Execute the following steps: - Set the environment variable: Incorporate ORT_DISABLE_TELEMETRY=1 into your Docker configuration. This variable directly inhibits the telemetry mechanism within ONNX Runtime, preventing the generation and transmission of DNS queries to Microsoft’s servers. - Mechanism: The ORT_DISABLE_TELEMETRY variable intercepts the initialization of ONNX Runtime’s telemetry module at runtime, bypassing the default behavior of constructing and dispatching HTTP requests to Microsoft’s telemetry endpoint. This intervention ensures that no metadata related to usage is exfiltrated. 2. Network Isolation of Immich Containers Disabling telemetry alone does not preclude potential data exposure. To enforce a robust self-hosting environment, isolate Immich containers from external networks. Implement the following measures using Docker Compose: - Create an isolated network: Define a Docker network with internal: true and the bridge driver. This configuration confines network traffic to the Docker environment, effectively blocking external communication. - Attach Immich containers: Assign all Immich-related containers to this isolated network. Reserve external network connectivity exclusively for your reverse proxy to handle incoming requests. - Mechanism: Docker’s network isolation operates by configuring the virtual Ethernet bridge (bridge driver) to discard packets destined for external IP addresses. This physical restriction ensures that containers cannot establish unauthorized outbound connections, thereby eliminating the risk of unintended data transmission. 3. Validation of Security Measures Post-implementation, validate the effectiveness of telemetry disablement and network isolation through the following procedures: - Monitor DNS logs: Inspect DNS logs for queries to mobile.events.data.microsoft.com. Successful disablement of telemetry will eliminate these queries, confirming the absence of telemetry activity. - Test network isolation: Execute ping commands to external IP addresses from within the Immich containers. If isolation is correctly configured, these commands will fail, verifying that external communication is blocked at the network level. 4. Broader Implications and Developer Accountability This issue underscores a pervasive challenge in self-hosted software ecosystems: the integration of third-party libraries without rigorous privacy audits. Developers must adopt the following practices to uphold user privacy and autonomy: - Transparency: Explicitly document all dependencies and their default behaviors, ensuring users are informed of potential privacy implications. - Proactive auditing: Conduct comprehensive privacy assessments of third-party libraries prior to integration, identifying and mitigating risks proactively. - User autonomy: Implement opt-out mechanisms for telemetry and data-sharing features, empowering users to retain control over their data. Until such practices become standard, users must proactively safeguard their self-hosted environments. By disabling telemetry and enforcing network isolation, you restore control over your data, aligning your deployment with the core tenets of self-hosting. Conclusion and Best Practices The integration of Microsoft telemetry within Immich Machine Learning, enabled by default through the ONNX Runtime library, exposes a critical vulnerability in self-hosted software ecosystems: third-party dependencies can autonomously compromise user privacy without explicit consent. This issue transcends technical oversight, constituting a fundamental breach of the trust inherent in self-hosting. Self-hosting relies on absolute control and transparency over data processing workflows. However, ONNX Runtime’s telemetry module, upon initialization, generates DNS queries to Microsoft’s servers (mobile.events.data.microsoft.com), potentially exfiltrating metadata associated with photo processing tasks. The causal mechanism is unambiguous: the telemetry module is instantiated at runtime, unconditionally triggering HTTP requests regardless of data sensitivity or user intent. This behavior directly contravenes the core tenet of self-hosting: maintaining exclusive user control over data. Why This Matters The implications are profound. Unchecked, such privacy violations establish a dangerous precedent, normalizing the silent exfiltration of data from self-hosted environments to external entities. For users processing sensitive content—such as personal photographs or proprietary intellectual property—this risk is intolerable. The concern extends beyond Microsoft; it underscores a systemic issue in software development: the uncritical integration of third-party libraries without rigorous auditing of their default behaviors. Even anonymized telemetry data exposes critical metadata, including cryptographic hashes of processed images and usage patterns. Once transmitted, this data falls outside user control, nullifying the privacy guarantees of self-hosting. Practical Mitigations Immediate action is imperative to safeguard user data. Implement the following measures: - Disable Telemetry: Inject the environment variable ORT_DISABLE_TELEMETRY=1 into the immich-machine-learning container. This intervention intercepts the telemetry module’s initialization process, physically blocking HTTP requests to Microsoft’s endpoint. - Enforce Network Isolation: Deploy Docker Compose to configure an isolated network with internal: true and bridge driver settings. This architecture discards outbound packets destined for external IP addresses, confining Immich containers to internal communication. Attach your reverse proxy to this isolated network to preserve external accessibility while maintaining internal segregation. Developer Accountability While users can mitigate this issue, ultimate responsibility rests with developers. The Immich team’s inaction since the issue’s reporting in August exemplifies a pervasive problem: privacy is systematically deprioritized in open-source projects. Developers must adopt proactive measures: - Audit Third-Party Libraries: Prior to integration, conduct exhaustive assessments of dependencies like ONNX Runtime. Telemetry mechanisms should never default to enabled in self-hosted software. - Document Dependencies Transparently: Explicitly disclose all third-party components, their default configurations, and potential data flows. Transparency is non-negotiable for building user trust. - Enforce Opt-In Telemetry: If telemetry is deemed necessary, implement an opt-in model, ensuring users retain explicit control over data transmission. Edge Cases and Risks Address edge cases rigorously: even with telemetry disabled, network isolation remains critical. Without it, other components in your infrastructure may still initiate external communication, bypassing telemetry mitigations. Validate your configuration by monitoring DNS logs for unauthorized queries to Microsoft’s endpoints and testing network isolation using ping commands. Failure to enforce network isolation exposes your system to persistent data leakage risks, irrespective of telemetry settings. Final Thoughts Self-hosting represents a commitment to privacy and autonomy. The Immich telemetry issue serves as a stark reminder: default behaviors in third-party libraries can silently subvert these principles. Users must maintain vigilance, regularly auditing and adjusting configurations to preempt vulnerabilities. Developers, in turn, must embed transparency and user sovereignty into their design paradigms. Only through concerted action can we restore trust in self-hosted solutions and ensure they deliver on their promise of uncompromised privacy.

  3. 自宅サーバー(Immich)の構築・運用手順 はじめに インフラエンジニア(運用保守)を目指して勉強している。LinuCレベル1を取ったあと、学んだことを実際に使ってみたくて、中古PCで自宅サーバーを作った。 この記事は、中古PCにRocky Linuxを入れて、写真管理アプリのImmichを動かし、写真を暗号化してGoogleドライブにバックアップするまでの手順をまとめたもの。構築はAIに聞きながら進めたので、あとから自分のサーバーで設定を確かめ、公式の手順と見比べながら書いている。 ! 各章の最後に「確認コマンド」を載せている。どれも設定を見るだけで、何も変更しない。 全体の構成 スマホ(Immichアプリ) │ 写真を送る(家のWi-Fi、2283番ポート) ▼ 中古PC(Rocky Linux) ├─ Docker の中で Immich が動く ├─ 写真は /home/ユーザー名/immich/library に保存 └─ 毎日 rclone で暗号化して送る ▼ Googleドライブ(中身はGoogleからも読めない) 項目 内容 PC 中古デスクトップ(NEC、Core i5-8400、メモリ16GB) OS Rocky Linux 10(Minimal) ディスク 約500GB(/ 70GB、/home 約386GB) IP 192.168.10.100(固定) 操作 Windows PCからSSH Googleフォトに写真をためたくなかったので、写真は自宅サーバーに置き、スマホからは消す運用にしている。そのぶんサーバーが壊れると写真が消えるので、暗号化してGoogleドライブにも控えを置いている。 1. Rocky Linuxのインストール 📖 公式:Rocky Linux ダウンロード / インストールガイド 1-1. インストールUSBを作る(Windowsで) Rocky Linux公式サイトから、Rocky Linux 10 の x86_64 用、Minimal のISOをダウンロード Rufus を起動し、USBメモリとISOを選ぶ パーティション構成は GPT、ターゲットシステムは UEFI のまま「スタート」 Rocky Linuxを選んだのは、企業でよく使われる Red Hat Enterprise Linux(RHEL)とほぼ同じ中身を無料で使えるから。Minimalは必要最低限のものだけが入った版で、画面(GUI)を使わないサーバーにはこれで足りる。余計なものが入っていないぶん、何が動いているかを把握しやすい。 1-2. インストールする 中古PCにUSBを挿し、起動時に F12 を押して USB から起動 インストーラーで設定する 言語:日本語 インストール先:内蔵ディスク(パーティションは自動) ネットワーク:eno1 を有効にする ユーザー作成:「このユーザーを管理者にする」にチェック 完了したら再起動し、USBを抜く ! 未確認:「eno1」「日本語」は、今のサーバーの状態から逆算したもの(パーティションが自動なのは lsblk で、管理者にしたのは id で確認済み)。 インストール後のディスクの分け方(lsblk の結果)。 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 464.2G 0 part ├─rl-root 253:0 0 70G 0 lvm / ├─rl-swap 253:1 0 7.8G 0 lvm [SWAP] └─rl-home 253:2 0 386.4G 0 lvm /home 場所 大きさ 役割 /boot/efi 600MB UEFIでPCを起動するための入口 /boot 1GB Linuxを起動するためのファイル / 70GB OSやアプリ本体 [SWAP] 7.8GB メモリが足りないときの予備 /home 約386GB ユーザーのデータ。写真もここに置く sda3 の中は LVM という仕組みで、1つの区画をさらに3つに分けている。/ を70GBで止めて残りを /home に回すのは、Rocky Linuxが自動で分けたときの形。 「管理者にする」にチェックすると、作ったユーザーが wheel グループに入り、sudo が使えるようになる。何でもできる root で普段から作業すると、打ち間違い一つでシステムを壊しかねない。普段は一般ユーザーで作業し、必要なときだけ sudo で root の力を借りる。 確認コマンド OSの名前とバージョン cat /etc/os-release | head -4 ディスクの分け方(自動で分けられた結果) lsblk 自分が wheel グループ(sudoが使える)に入っているか id 2. 最初の設定 📖 公式:Rocky Linux ネットワーク設定 2-1. OSを最新にする すべてのパッケージを最新にする sudo dnf update -y インストール用のISOは作られた時点のものなので、その後に出た不具合やセキュリティの修正が入っていない。最初に最新にしておく。 2-2. IPアドレスを固定する 接続の名前を確認する(NAMEの列。このPCは eno1) nmcli connection show IPアドレス・出口(ゲートウェイ)・DNSを手動で設定する sudo nmcli connection modify eno1 \ ipv4.method manual \ ipv4.addresses 192.168.10.100/24 \ ipv4.gateway 192.168.10.1 \ ipv4.dns 1.1.1.1 設定を反映する sudo nmcli connection up eno1 ipv4.method manual:ルーターから自動でもらうのをやめ、自分で決める ipv4.addresses:このサーバーの住所。/24 は「192.168.10.まで同じなら同じネットワーク」という意味 ipv4.gateway:家の外(インターネット)に出るときの出口。家のルーター ipv4.dns:名前(google.com など)を住所に変換してくれる相手。1.1.1.1 は Cloudflare という会社が無料で公開しているDNS modify は設定を書き込むだけで、up を打つまで反映されない。 家のルーターは普通、つないだ機械に空いている番号を自動で配る。そのままだと再起動のたびに番号が変わることがあり、スマホやPCがサーバーを見つけられなくなる。サーバーは「いつも同じ住所にいる」必要があるので固定する。 ! ハマったこと:出口(ゲートウェイ)が 192.168.1.1 になっていて、サーバーがインターネットに出られなかった。自分のIP(192.168.10.x)と出口が別のネットワークにあったのが原因。ip route で見つけて、192.168.10.1 に直した。 確認コマンド nmcli connection show eno1 | grep -E "ipv4.method|ipv4.addresses|ipv4.gateway|ipv4.dns:" ip route ping -c 3 8.8.8.8 3. SSH鍵認証 📖 公式:Rocky Linux SSH公開鍵と秘密鍵(公式は Linux から ssh-copy-id で送る方法。Windows にはこのコマンドがないので、下では別の方法を使っている) 3-1. 鍵を作る(Windowsの PowerShell で) ed25519 という種類の鍵のペアを作る(質問はすべて Enter でOK) ssh-keygen -t ed25519 C:\Users\(Windowsのユーザー名).ssh\ に2つのファイルができる。 id_ed25519:秘密鍵。このPCから絶対に出さない id_ed25519.pub:公開鍵。サーバーに渡す 公式の例は rsa だが、ed25519 は今主流の種類で、鍵が短く処理も速い。 3-2. 公開鍵をサーバーに登録する(Windowsの PowerShell で) 公開鍵をサーバーの「入っていい鍵の名簿」(authorized_keys)に追加する type $env:USERPROFILE.ssh\id_ed25519.pub | ssh ユーザー名@192.168.10.100 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" type ... |:公開鍵の中身を読み出して、右のコマンドに渡す mkdir -p ~/.ssh:鍵を置くフォルダがなければ作る cat >> ~/.ssh/authorized_keys:渡された公開鍵を名簿の最後に書き足す chmod 700 / chmod 600:フォルダと名簿を自分だけが読み書きできるようにする。他人も書き込める状態だと、SSHは安全でないと判断して鍵を使わない ! 鍵を登録したときのコマンドの記録は残っていない。上は Windows からの一般的な登録方法。 鍵でログインできることを確かめる。 ssh ユーザー名@192.168.10.100 3-3. パスワードでのログインを止める(サーバーで) 設定ファイルを開く sudo vi /etc/ssh/sshd_config #PasswordAuthentication yes の行を、次のように書き換える(# を消す)。 PasswordAuthentication no 書き間違いがないか確認(何も出なければOK) sudo sshd -t 設定を反映する sudo systemctl restart sshd が付いた行はただのメモで、効いていない。何も書かれていない項目は初期値が使われ、PasswordAuthentication の初期値は yes。つまり # を消して no と書かない限り、パスワードでも入れる。 ! 今のSSH接続は切らずに、別のウィンドウから鍵でログインできるか確かめる。設定を間違えると自分も入れなくなるので、今の接続を命綱として残しておく。 パスワードは、当てずっぽうに何度も試されると破られる可能性がある。鍵の場合、ログインには秘密鍵そのものが必要で、それは自分のPCにしかない。パスワードを止めれば、秘密鍵を持っているPCからしか入れなくなる。 ! ハマったこと:鍵認証を設定したつもりだったが、この行が # 付きのままで、パスワードでも入れる状態だった。あとから確認して気づいた。 確認コマンド 実際に効いている設定を表示する sudo sshd -T | grep -iE "^passwordauthentication|^pubkeyauthentication|^permitrootlogin" 4. Dockerのインストール 📖 公式:Install Docker Engine on RHEL / インストール後の設定(sudoなしで使う) Docker公式の配布元(リポジトリ)を登録する sudo dnf -y install dnf-plugins-core sudo dnf config-manager --add-repo download.docker.com Docker本体と docker compose を入れる sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Dockerを起動し、PC起動時にも自動で起動するようにする sudo systemctl enable --now docker 動作確認(テスト用のコンテナを動かして、メッセージが出れば成功) sudo docker run hello-world 自分を docker グループに入れる(sudo なしで docker を使えるようにする) sudo usermod -aG docker $USER dnf config-manager --add-repo:Rocky Linux の標準の配布元には Docker が入っていないので、Docker 社の配布元を追加する systemctl enable --now:enable は起動時に自動で動かす設定、--now は今すぐ起動 usermod -aG docker:-a は「今のグループに追加」、-G は「このグループに」。-a を忘れると他のグループから外れてしまう グループの変更は、一度ログアウトしてログインし直すと反映される。 ! Dockerを入れたときの記録は残っていないが、dnf repolist に Docker 公式の配布元(docker-ce-stable)があり、id で docker グループに入っていることも確認できたので、この公式の手順で入れたと考えられる。 $ dnf repolist repo id repo の名前 appstream Rocky Linux 10 - AppStream baseos Rocky Linux 10 - BaseOS docker-ce-stable Docker CE Stable - x86_64 extras Rocky Linux 10 - Extras baseos:OSの土台になる部品の配布元 appstream:アプリや開発ツールの配布元 extras:おまけの追加部品の配布元 docker-ce-stable:Docker社の配布元。dnf config-manager --add-repo で自分で追加したもの Dockerは、アプリを動かすのに必要なもの一式を「箱(コンテナ)」に詰めて動かす仕組み。Immichはデータベースや画像認識など複数のソフトでできているので、全部をRocky Linuxに直接入れると、部品同士がぶつかったり、消すときに散らかったりする。箱に入れておけば本体のOSを汚さず、更新も箱の入れ替えで済む。 確認コマンド docker --version docker compose version systemctl is-enabled docker dnf repolist groups 5. Immichの構築 📖 公式:Docker Compose でのインストール / 必要な性能 / インストール後の設定 5-1. 作業フォルダを作る mkdir -p ~/immich cd ~/immich 公式の例ではフォルダ名が immich-app だが、名前は何でもいい。 5-2. 設定ファイルをダウンロードする コンテナの設計図 wget -O docker-compose.yml github.com/immich-app/immich/releases/latest/down… 設定の記入欄(.env という名前で保存する) wget -O .env github.com/immich-app/immich/releases/latest/down… docker-compose.yml:どの箱を、どうつないで動かすかの設計図 .env:保存場所やパスワードなどの記入欄。設計図はここの値を読み込む -O:ダウンロードしたファイルを、指定した名前で保存する 5-3. .env を確認する grep -E "UPLOAD_LOCATION|IMMICH_VERSION|TZ" .env UPLOAD_LOCATION=./library IMMICH_VERSION=v3 UPLOAD_LOCATION=./library:写真の保存先。. は今いるフォルダなので、~/immich/library になる IMMICH_VERSION=v3:v3系の最新を使う。ただし自動では更新されず、docker compose pull したときに取ってくる 写真の保存先を /home 側にしたのは、ディスクが /(70GB)と /home(約386GB)に分かれていて、/home のほうがずっと広いから。/ がいっぱいになると、OS自体が動かなくなるおそれがある。 公式では、ほかに次の2つを変えるよう勧めている。 DB_PASSWORD:データベースのパスワード。初期値の postgres から、英数字だけのランダムな文字列に変える TZ:# を外して Asia/Tokyo にする 自分のサーバーでは、TZ は # TZ=Etc/UTC のまま(# 付きで効いていない)だった。そのため Immich は世界標準時(UTC)で動いていて、ログの時刻は日本時間より9時間遅れて表示される。トラブル調査でログを読んだとき、時刻に9時間足して考える必要があった。 記事を書くときに気づいたので、直した。 # を消して TZ=Asia/Tokyo に書き換える vi ~/immich/.env 設定を読み直して、箱を作り直す(写真は箱の外にあるので消えない) cd ~/immich docker compose up -d DB_PASSWORD も初期値の postgres のままだった。パスワードを画面に出さずに確かめるには、次のようにする。 初期値と同じ行があるかだけを調べ、中身は表示しない grep -q "^DB_PASSWORD=postgres$" ~/immich/.env && echo "初期値のまま" || echo "変更済み" docker ps で見ると、データベースの箱(immich_postgres)は 5432/tcp とだけ表示され、0.0.0.0: が付いていない。つまり箱の外には窓口を出しておらず、外から直接つなぐことはできない。そのため今すぐ危ないわけではないが、最初に構築するなら変えておくべきだった。 ! あとから .env のパスワードだけを書き換えると、Immich がデータベースに入れなくなる。パスワードはデータベースを最初に作ったときに決まるので、変えるならデータベース側のパスワードも一緒に変える必要がある。 ! .env にはパスワードが書かれているので、中身は記事やSNSに貼らない。 5-4. 起動する 設計図どおりにコンテナをまとめて起動する(-d は裏で動かす) docker compose up -d 起動するコンテナは4つ。 コンテナ 役割 immich_server 本体。スマホやブラウザの窓口(2283番) immich_machine_learning 顔や物の認識 immich_postgres 写真の情報を管理するデータベース immich_redis 一時的な作業メモ 写真そのものは箱の外の library フォルダに保存される。だから箱を作り直しても写真は消えない。 5-5. ファイアウォールで2283番を開ける 📖 公式:firewalld for Beginners 2283番を恒久的に開ける sudo firewall-cmd --permanent --add-port=2283/tcp 設定を反映する sudo firewall-cmd --reload --permanent:再起動しても消えない設定として保存する。付けないと、再起動で元に戻る --reload:保存した設定を今すぐ反映する。--permanent だけでは、まだ効いていない ファイアウォールは、外から入れるドアを決める門番。Rocky Linuxは初期状態で SSH など一部しか開いていないので、Immichの入口の2283番を追加で開ける。使わないドアは閉じておくのが基本。 5-6. スマホとつなぐ ブラウザで 192.168.10.100 を開き、管理者アカウントを作る スマホに Immich アプリを入れ、サーバーのURLに同じアドレスを入れてログイン 写真へのアクセスを許可し、バックアップするアルバムを選ぶ ! ハマったこと:アルバムを選ばないと何も送られない。スマホを買い替えたときにこの選択が空に戻っていて、9月から自動保存が止まっていた。 確認コマンド docker ps sudo firewall-cmd --list-all df -h /home 5-7. Immichを更新するとき 📖 公式:アップデート / バックアップと復元 cd ~/immich 先にデータベースのバックアップを取る docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > ~/immich-backup-$(date +%F).sql.gz 新しい版を取ってきて入れ替える docker compose pull docker compose up -d docker exec -t immich_postgres pg_dumpall ...:データベースの箱の中で、中身を丸ごと書き出す | gzip > ...:書き出したものを圧縮して、日付入りのファイルに保存する pull:新しい版の箱を取ってくる。up -d:古い箱と入れ替えて起動する 更新でデータベースの形が変わることがあるので、失敗しても戻せるように先に控えを取る。 ! ハマったこと:自動保存が止まったとき、スマホのアプリだけ自動で新しくなっていて、サーバーとバージョンがずれていた。これが原因だと思って更新したが、自動保存は直らなかった。本当の原因は、スマホの買い替えでバックアップするアルバムの選択が空に戻っていたこと(5-6)。サーバーは自分で pull しない限り古いままなので、更新は定期的にやる。 6. rcloneでGoogleドライブに暗号化バックアップ 📖 公式:rclone インストール / Google Drive / 画面のないサーバーでの設定 / crypt(暗号化) 6-1. rcloneを入れる curl rclone.org | sudo bash curl:URLの中身(インストール用の手順書)を取ってくる | sudo bash:取ってきた手順書を、管理者権限でそのまま実行する rcloneは、サーバーとクラウドの間でファイルをやりとりするツール。Googleドライブなど多くのクラウドに対応していて、暗号化もできる。 6-2. Googleドライブへの入口(gdrive)を作る rclone config 質問 入力 n/s/q> n(新規作成) name> gdrive Storage> Google Drive の番号 client_id / client_secret 空欄で Enter scope> 1(フルアクセス) Use web browser to automatically authenticate? n サーバーには画面がないので、Googleへのログインは Windows で行う。サーバーに表示された rclone authorize "drive" "…" を、Windows に入れた rclone でそのまま実行し、出てきた結果をサーバーに貼り付ける。これで、サーバーがGoogleドライブに入るための許可(トークン)が設定ファイルに保存される。 6-3. 暗号化の入口(secret_drive)を作る 続けて n で新規作成。 質問 入力 name> secret_drive Storage> crypt remote> gdrive:immich_secure filename_encryption> standard directory_name_encryption> true パスワード y で自分で決める salt(2つ目のパスワード) n secret_drive: に送ると、自動で暗号化されて、Googleドライブの immich_secure フォルダに入る。取り出すときは自動で元に戻る。 入口が2つあるのは、「Googleドライブに行く道」と「暗号化する加工」を分けているから。gdrive: はGoogleドライブそのもの、secret_drive: はその上にかぶせた暗号化のフィルター。ファイル名やフォルダ名も暗号化しているので、Google側からは何の写真かも分からない。 ! 暗号化のパスワードと設定ファイル(rclone config file で場所が分かる)は、サーバー以外の場所にも控えておく。サーバーが壊れたとき、これがないとバックアップを元に戻せない。 6-4. テストする echo "test" > test.txt rclone copy test.txt secret_drive: Googleから見た姿(暗号化された名前になっている) rclone lsf gdrive:immich_secure 暗号化の入口から見た姿(test.txt に戻っている) rclone lsf secret_drive: 片付け rm test.txt rclone deletefile secret_drive:test.txt 確認コマンド rclone listremotes rclone about secret_drive: 7. cronで自動化する 📖 公式:rclone sync / rclone のオプション一覧(cron 自体は man 5 crontab で書き方を見られる) cronは決まった時刻にコマンドを実行する予約係。予約表(crontab)はユーザーごとにあり、書いたコマンドはそのユーザーの権限で実行される。先頭の5つは左から「分 時 日 月 曜日」で、* は「毎回」。0 22 * * * は毎日22時0分になる。 7-1. バックアップ(自分の予約表) 自分の予約表を編集する(sudo なし) crontab -e 0 22 * * * flock -n /tmp/rclone-backup.lock /usr/bin/rclone sync /home/ユーザー名/immich/library secret_drive: --exclude "thumbs/" --exclude "encoded-video/" --delete-excluded --tpslimit 10 --log-file /home/ユーザー名/rclone-backup.log --log-level INFO @reboot sleep 300 && flock -n /tmp/rclone-backup.lock /usr/bin/rclone sync /home/ユーザー名/immich/library secret_drive: --exclude "thumbs/" --exclude "encoded-video/" --delete-excluded --tpslimit 10 --log-file /home/ユーザー名/rclone-backup.log --log-level INFO 1行目:毎日22時にバックアップ 2行目:起動して5分後にもバックアップ。普段は使うときだけ電源を入れるので、22時に電源が入っていない日の分を取り戻す バックアップを自分の予約表に書くのは、rcloneの設定(Googleドライブの許可や暗号化のパスワード)が自分のユーザーの場所に保存されているから。rootで動かすと、rootの場所を探して「設定がない」となる。 付けたオプションの意味: flock -n /tmp/rclone-backup.lock:二重に動かないようにする。前のバックアップがまだ動いていたら、新しいほうは始めずに終わる @reboot sleep 300:起動直後はネットワークなどの準備ができていないことがあるので、5分待ってから始める --exclude "thumbs/" / "encoded-video/":Immichが自動で作る縮小画像や変換した動画は送らない。元の写真があれば作り直せるので、控えは要らない --delete-excluded:除外したものがドライブに残っていたら消す --tpslimit 10:Googleへの問い合わせを1秒に10回までに抑える。一度に大量に送ると、Googleに回数制限で止められる --log-file / --log-level INFO:結果をファイルに残す。cronは失敗しても何も知らせてくれないので、ログがないと気づけない /usr/bin/rclone:cronはコマンドの置き場所を探してくれないことがあるので、場所を正確に書く sync は「送り先をサーバーと同じ状態にする」コマンドで、サーバーで消した写真はドライブからも消える。copy は追加するだけで消さない。今は、サーバーで整理した結果をそのままドライブに反映させたいので sync にしている。ただ、間違えて消した写真もドライブから消えてしまうので、そこは注意している。 ! ハマったこと:最初は送り先の名前を secret_crypt: と書き間違えていて、毎晩すぐにエラーで終わっていた。cronは失敗しても何も言わないので、Googleドライブに30日分のファイルがないことで初めて気づいた。 7-2. 自動シャットダウン(rootの予約表) root の予約表を編集する sudo crontab -e 0 23 * * * /usr/sbin/shutdown -h now 毎日23時に電源を切る -h now:今すぐ(23時になったら)完全に電源を切る 電源を切るのはシステム全体に関わる操作なので、root の予約表に書く。 ! ハマったこと:あとで確認したら、同じシャットダウンの行が自分の予約表にも入っていた。設定を直したときに、AIの案のまま足してしまっていた。一般ユーザーの予約表からは電源を切れないことがあるので、root の予約表の1か所だけにした。 確認コマンド crontab -l sudo crontab -l sudo grep rclone /var/log/cron | tail -5 tail -20 ~/rclone-backup.log 8. 本当に戻せるか確かめる 📖 公式:rclone copy サーバー側の写真を1枚選ぶ find ~/immich/library/upload -type f | head -1 同じファイルをGoogleドライブから取り出す rclone copy secret_drive:upload/(ファイルのパス) /tmp/restoretest/ 元のファイルと比べる(同じなら「同じです」と出る) cmp (元のファイル) /tmp/restoretest/(ファイル名) && echo "同じです" バックアップは、戻せることを確かめて初めて意味がある。設定が間違っていたり、暗号化のパスワードを忘れていたりすると、送ったつもりでも取り出せない。写真をスマホから消している以上、ここは一度は確かめておく必要がある。 9. 運用してみて起きたこと 起きたこと 原因 どう気づいたか サーバーがネットに出られない 出口(ゲートウェイ)のアドレス違い ip route 自動保存が9月から止まった スマホ買い替えでアルバム選択が空に(途中でバージョンのずれも見つけて更新したが、原因ではなかった) サーバーのログで正常と確認、アプリの設定 バックアップが動いていなかった cronの送り先名の書き間違い rclone lsl --max-age 30d、cronのログ パスワードでもSSHに入れた sshd_config の設定が # 付きのまま sshd -T どれも「設定したつもり」で、実際には効いていなかったもの。 学んだこと 設定して終わりではなく、動くか、戻せるかまで確かめる cronは失敗しても何も言わない。結果をログに残しておかないと気づけない 何かが止まったら、まず「最近何を変えたか」を確かめる(スマホの買い替え、アプリの自動更新) 構築はAIに聞きながらでもできた。でも、自分で確かめて直したところだけが、自分で説明できるところになった おわりに AIにほとんど任せて構築してしまったのを後悔している。当時は結果を早く求めすぎていた。 まず、最初にやることをリストにして、公式ドキュメントを見ながら進めるクセをつけたい。 自分でもこの記事を見ながら復習する。 この経験が誰かの一助になれればうれしい。

  4. 🔭 Today's find static-pages — Sites and packages for Immich #indiedev #opensource #typescript 👀 worth a look

    4 likes · 2 reposts
  5. Reddit · · r/immich · u/EvilMonkeySlayer · immich-app/immich

    Handling HEIF images taken by the Canon R50, washed out colours Is there any known workaround for how immich handles HDR HEIF photos taken by the Canon R50? I've found this github link that talks about this but I've got a number of photos that have this problem in immich but not google photos. For example, on this image of a photo I took on the left is immich and on the right is how it previews correctly in windows.

    2 points · 1 comment
  6. YouTube · · YouTube description · Repo Radar · immich-app/immich

    immich: The Hottest TypeScript Repo on GitHub Right Now #Shorts In this video, we break down immich-app/immich - one of the hottest open-source projects on GitHub right now. High performance self-hosted photo and video management solution. It has already earned 116,948 stars on GitHub and is written primarily in TypeScript. We look at what it does, why developers are paying attention to it right now, and who should try it. 📂 Repo: immich-app/immich 🌐 Stars: 116,948 | Language: TypeScript | Forks: 7,308 🔔 Subscribe for daily picks of the hottest GitHub repos: / @reporadar #github #opensource #programming keywords: coding, developer tools, github, opensource, programming, software, tech #Shorts

    87 views
  7. Self-host Immich: I measured what Google Photos replacement actually costs in RAM Originally published on FreeTierWatch, where we actually deploy and measure what we write about. Immich is the self-hosted Google Photos replacement — 115,000+ GitHub stars, mobile apps with automatic backup, face recognition, and ML-powered search ("sunset over water" actually finds your sunset photos). It's the app that convinced a generation of self-hosters that leaving Google Photos was possible. It's also the heaviest thing we've deployed in this series. Where Vaultwarden runs in 14 MB and Uptime Kuma in ~150 MB, Immich is a four-container stack that wants gigabytes. We deployed it, uploaded photos, ran the ML search, and measured what it really costs. What you need (honestly) - 4 GB+ free RAM — our measured working set was ~2.4 GB across the stack, with spikes during ML processing - ~5 GB disk before any photos — the images alone total 4.7 GB - Docker + Compose, 20 minutes - Not a 1 GB VPS. This is the app the free Oracle ARM VM (12 GB RAM) was made for Step 1: the official Compose stack Immich ships its own Compose file — use it rather than hand-rolling: mkdir immich && cd immich curl -LO https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml curl -L -o .env https://github.com/immich-app/immich/releases/latest/download/example.env Edit .env before starting — two changes are non-optional: # generate a real DB password (alphanumeric only — special chars break it) DB_PASSWORD=$(openssl rand -hex 16) # set your timezone or every photo's date will be UTC TZ=Asia/Kolkata Also note UPLOAD_LOCATION=./library — point this at your biggest disk; it's where every photo lives. docker compose up -d First start pulled 4.7 GB of images (server 2.44 GB, machine-learning 1.1 GB, Postgres-with-vector-extensions 989 MB, Valkey 180 MB) and took ~2.5 minutes on our connection. Then open http://localhost:2283, create the admin account, and click through onboarding. What it costs to run (measured) | Container | RAM (settled, 5 photos processed) | Notes | | :--- | :--- | :--- | | immich_server | 962 MB | Peaked at 1.3 GB during initial processing | | immich_machine_learning | 928 MB | ~200 MB idle; balloons when generating embeddings | | immich_postgres | 465 MB | Vector-enabled Postgres (pgvecto.rs/VectorChord) | | immich_redis (Valkey) | 14 MB | | | Total working set | ~2.4 GB | | | Other metrics | Measured | | :--- | :--- | | Images on disk | 4.7 GB | | Database size (5 photos) | 330 MB (ML models + vector indexes dominate) | | Upload speed | 5 photos (470 KB avg) in 235 ms via API | | ML smart search | "sunset over water" → correct photo ranked #1, 2.2 s on CPU | | Server restart to ready | 5 s | The headline: the machine-learning magic is real and runs fine on CPU — but it's why this stack needs several GB of RAM where a plain photo gallery would need 200 MB. That's the trade: Google-Photos-grade search, Google-Photos-grade resource bill (except you pay in RAM, not rupees). !Immich timeline showing uploaded photos Gotchas we hit or verified - DB password charset: special characters in DB_PASSWORD break the connection string — the env file warns you; believe it. Alphanumeric only. - The compose file changes between releases. Immich moves fast (it only recently left "breaking changes any week" beta culture). Always re-download the compose file from the release you're upgrading to — don't just docker compose pull. - ML is optional but on by default. On a weak machine you can remove the immich-machine-learning service entirely — uploads and browsing work; you lose smart search and face recognition. - Mobile backup needs HTTPS or same-network HTTP. For remote access, put it behind a reverse proxy with TLS, or better: Tailscale — don't expose a photo library to the open internet. - The database is not disposable. Unlike our other guides where the data volume was a convenience, here Postgres holds all metadata, albums, faces, and edits. Back up BOTH the library folder AND a pg_dump — the official docs have a backup guide; follow it before you load 20,000 photos, not after. When NOT to self-host Immich - Under 4 GB of spare RAM — it will run badly or not at all. This is the one app in our series where the free-tier PaaS options are all non-starters; it needs a real machine. - Your photos currently live only on your phone. Until your Immich server itself is backed up (3-2-1: the library folder + DB dump, off-site), it's not a backup — it's a second copy on hardware you administer. Google Photos' value was never the gallery; it was the durability. - Intermittent homelab. A backup target that's offline when your phone wants to sync defeats the purpose. Our test box is a workstation; a real deployment wants always-on — the Oracle free VM's 2 OCPU/12 GB fits Immich better than anything else free. What we actually ran this on - Machine: Intel Core Ultra 7 255H (16 cores), 30 GB RAM, NVMe - OS: Ubuntu 24.04.5 LTS · Docker: 29.8.1, Compose v5.1.3 - Immich: v3 (release tag), official compose: server + ML + VectorChord Postgres + Valkey - Verified: admin setup, API upload (5 photos), thumbnail + embedding generation, smart search ranking, restart persistence - Date: 2026-10-30

  8. How to Install Immich: Self-Hosted Google Photos in 15 Minutes Last year I compared running Nextcloud and Immich side by side, and the verdict was clear: for photos specifically, Immich wins. It's the closest thing to a self-hosted Google Photos — automatic phone backup, face recognition, map view, shared albums — but several people asked for the actual install walkthrough. Here it is. This guide gets Immich running with Docker Compose, your phone auto-uploading, and the mistakes to avoid. What you need - A server with Docker and Docker Compose — 4 GB RAM recommended (the machine-learning container is the hungry one; it runs fine on less if you're patient) - Storage sized for your library, plus headroom for generated thumbnails (roughly 5–10% extra) - Optional but recommended: a domain and HTTPS via reverse proxy Get the official files Immich ships a ready-made Compose setup. Don't hand-roll it — the project moves fast and their files track the correct service wiring: mkdir immich && cd immich wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env That gives you four containers: the server, machine learning (faces/objects/search), Redis, and PostgreSQL with the pgvecto.rs extension the ML search needs. Configure .env Open .env and set three things: # Where your photos actually live — point at real storage, not the SD card UPLOAD_LOCATION=/mnt/storage/immich # A proper password, not the default DB_PASSWORD=use-something-long-and-random # Your timezone for correct timestamps TZ=Asia/Kolkata The UPLOAD_LOCATION choice matters more than it looks. Everything Immich ingests lands there, organized by user and date. Moving it later is possible but annoying — put it on the big disk now. Start it docker compose up -d docker compose logs -f immich_server Wait for the "Immich Server is listening" line, then open http://your-server-ip:2283. Create the admin account on first visit — this is your account, the family gets their own later from Administration → Users. Phone backup: the part everyone actually wants Install the Immich app (Play Store, F-Droid, or App Store), log in with your server URL, then: 1. Tap your profile picture → Backup 2. Select albums to include (Camera at minimum) 3. Enable Background backup — on Android also disable battery optimization for Immich, or uploads silently stop overnight 4. Leave "Upload on Wi-Fi only" on unless your data plan is heroic The first sync of an existing library takes a while. Plug the phone in, let it chew overnight. Make it survivable HTTPS. If the app will ever connect outside your LAN, put Immich behind HTTPS — you're streaming your entire photo library. Any reverse proxy with Let's Encrypt works; just make sure WebSocket upgrades pass through (Upgrade/Connection headers in Nginx). Backups. Immich is not a backup — it's your library. Protect two things: the UPLOAD_LOCATION folder (the actual photos) and a database dump: docker exec immich_postgres pg_dumpall -c -U postgres | gzip > immich-db-$(date +%F).sql.gz Fold both into your 3-2-1 backup routine. Upgrades. This is the one rule Immich veterans repeat: read the release notes before pulling. Immich ships breaking changes and database migrations regularly. docker compose pull && docker compose up -d handles the mechanics, but never upgrade blind, and take a database dump first. Auto-updaters like Watchtower are a bad idea here. Nice extras once it's stable - External libraries (Administration → Libraries): point Immich at an existing photo folder without importing/copying it — perfect for the archive already on your NAS - Hardware acceleration: if the server has a GPU or Intel Quick Sync, enable it for thumbnail and transcoding jobs in the Compose file's hwaccel variants - Shared albums with partner accounts: each person backs up to their own account, then share albums — no more "send me that photo" Where this leaves you Photos flowing automatically from every phone in the house to storage you own, searchable by face and place, with no subscription and nobody training models on your kids' birthdays. Combined with Filux for sharing files and Vaultwarden for passwords, the biggest pieces of the Google stack now live on your hardware.

  9. Reddit · · r/immich · u/Great-Cow7256 · immich-app/base-images

    Postgres 14 eol 12 Nov 2026. Best next steps? I updated to immich postgres 18 a while back but the default/suggested immich docker compose still pulls 14. Any idea how immich will handle this? Petty much every major postgres bump requires a migration of the db. And staying on 14 after eol doesn't seem like a great idea given how fast and frequent very critical cves are being discovered with the use of AI. Postgres 19 is coming out late November but who knows when immich will support that. My best suggestion (if there isn't any official guidance after EOL) is that for everyone on postgres 14 to just back up the db and migrate straight to postgres 18. (Beware of default data path changes between 14 and 18 that will require a change in the location of your db files). That'll kick the can down the road to November 2030 in that postgres will still push updates that immich will use to rebuild their postgres image, and Immich already supports postgres 18. github.com/immich-app/base-images/pkgs/container/… Any other ideas? Is there a good tutorial somewhere for those migrating? I couldn't find anything official immich on this.

    56 points · 17 comments
  10. YouTube · · YouTube description · Yash.Dev-Coder · immich-app/immich

    RUKO! Har Mahine ₹28,421 Software Pe? Ye 10 FREE GitHub Repos Bill ZERO Kar Dete Hain! #github #ai 1. ₹28,000/Month Software Bill vs ₹0? 10 Free Open-Source Replacements! 2. Semrush ₹13,155 Se ₹0? Top 10 Free GitHub Tools Jo Paise Bachate Hain! 3. Free Software = Kamzor? GALAT! 4,45,497+ GitHub Stars Wale 10 Tools DESCRIPTION (copy-paste - FULL): Har mahine ₹28,000 software pe? Ye 10 free GitHub repos us bill ko zero kar dete hain! Sab sochte hain free software matlab kamzor software. GALAT! In 10 repos ke paas total 4,45,497+ GitHub stars hain. TIMESTAMPS: 0:00 - Har mahine ₹28,000 software pe? 0:06 - Free = kamzor? Galat! 0:14 - #10 Immich - Google Photos ka replacement, 1.17 lakh stars, bachat ₹650/mahina 0:22 - #9 OpenProject - Asana ki jagah, bachat ₹1,268/mahina 0:28 - #8 Cal.com - Calendly ka open-source version, 49K stars, bachat ₹1,128/mahina 0:37 - #7 OpenWhispr - Wispr Flow jaisi voice typing, offline bhi, bachat ₹1,410/mahina 0:45 - #6 AppFlowy - Notion ka replacement, 77K stars, bachat ₹1,504/mahina 0:53 - #5 Cap - Loom jaisi screen recording, bachat ₹1,692/mahina 0:59 - Top 4 - yahan bill sach mein bada hai 1:03 - #4 Penpot - Figma ka open-source jawab, 61K stars, bachat ₹1,880/mahina 1:10 - #3 Chatterbox - ElevenLabs jaisi AI voice, Hindi bhi bolta hai, bachat ₹2,068/mahina 1:18 - #2 Chatwoot - Intercom ki jagah, saare customer chats ek inbox mein, bachat ₹3,666/mahina 1:26 - #1 OpenSEO - Semrush ka replacement, akele ₹13,000+ mahina bachata hai 1:33 - Total: ₹28,421/mahina, saal ka ₹3.4 lakh 1:38 - CATCH: ye poora zero tabhi hoga jab aap inhe khud host karo - server ka chhota kharcha, aur OpenSEO ke data API ka bill alag 1:48 - Comment SAVE, saare 10 links DM, founder ko bhejo, Follow 10K tak SARE 10 REPOS (GitHub): #10 Immich - immich-app/immich #9 OpenProject - opf/openproject #8 Cal.com - calcom/cal.com #7 OpenWhispr - openwhispr/openwhispr #6 AppFlowy - AppFlowy-IO/AppFlowy #5 Cap - CapSoftware/Cap #4 Penpot - penpot/penpot #3 Chatterbox - resemble-ai/chatterbox #2 Chatwoot - chatwoot/chatwoot #1 OpenSEO - every-app/open-seo Tum pehle kaun sa tool try karoge? Comment me uska number likho! Agar ye kaam aaya to Follow/Subscribe kar lo. Credit: Original video - MadeToScale (@madetoscale2026) Ye Hindi AI voiceover ke saath edited version hai. HASHTAGS (description ke end me): #FreeSoftware #OpenSource #GitHub #FreeTools #SoftwareBill #SaveMoney #Immich #AppFlowy #Penpot #OpenSEO #HindiTech #YashDevCoder TAGS (comma separated, YouTube Studio me): free github repos, open source tools Hindi, software bill save, Immich, OpenProject, Cal.com, AppFlowy, Penpot, OpenSEO, Chatwoot, free alternatives, Hindi tech tutorial, Yash Dev Coder [bn] থামুন! প্রতি মাসে সফটওয়্যারের পেছনে ২৮,৪২১ টাকা খরচ? এই ১০টি ফ্রি GitHub রিপো আপনার বিল জিরো করে... ১. প্রতি মাসে ২৮,০০০ টাকার সফটওয়্যার বিল বনাম শূন্য টাকা? ১০টি ফ্রি ওপেন-সোর্স বিকল্প! ২. Semrush-এর বিল ১৩,১৫৫ টাকা থেকে শূন্য? টাকা বাঁচানোর সেরা ১০টি ফ্রি GitHub টুল! ৩. ফ্রি সফটওয়্যার মানেই দুর্বল? ভুল! ৪৪৫,৪৯৭+ GitHub স্টার পাওয়া ১০টি টুল বিবরণ (সম্পূর্ণ কপি-পেস্ট): সফটওয়্যারের জন্য প্রতি মাসে ২৮,০০০ টাকা? এই ১০টি ফ্রি GitHub রিপো সেই বিল শূন্যে নামিয়ে আনে! সবাই মনে করে ফ্রি সফটওয়্যার মানেই দুর্বল সফটওয়্যার। ভুল! এই ১০টি রিপো-তে মোট ৪৪৫,৪৯৭+ GitHub স্টার রয়েছে। টাইমস্ট্যাম্প: ০:০০ - সফটওয়্যারের জন্য প্রতি মাসে ২৮,০০০ টাকা? ০:০৬ - ফ্রি মানেই দুর্বল? ভুল! ০:১৪ - #১০ ইমিচ (Immich) - গুগল ফটোজের বিকল্প, ১.১৭ লক্ষ স্টার, প্রতি মাসে ৬৫০ টাকা সাশ্রয় ০:২২ - #৯ ওপেনপ্রজেক্ট (OpenProject) - সহজ বিকল্প, প্রতি মাসে ১,২৬৮ টাকা সাশ্রয় ০:২৮ - #৮ ক্যাল.কম (Cal.com) - ক্যালেন্ডলির (Calendly) ওপেন-সোর্স সংস্করণ, ৪৯ হাজার স্টার, প্রতি মাসে ১,১২৮ টাকা সাশ্রয় ০:৩৭ - #৭ ওপেনহুইস্পার (OpenWhispr) - উইসপ্র ফ্লো-এর (Wispr Flow) মতো ভয়েস টাইপিং, অফলাইনেও কাজ করে, প্রতি মাসে ১,৪১০ টাকা সাশ্রয় ০:৪৫ - #৬ অ্যাপফ্লোয়ি (AppFlowy) - নোশনের (Notion) বিকল্প, ৭৭ হাজার স্টার, প্রতি মাসে ১,৫০৪ টাকা সাশ্রয় ০:৫৩ - #৫ ক্যাপ (Cap) - লুমের (Loom) মতো স্ক্রিন রেকর্ডিং, প্রতি মাসে ১,৬৯২ টাকা সাশ্রয় ০:৫৯ - সেরা ৪ - এখানকার বিল সত্যিই অনেক বেশি ১:০৩ - #৪ পেনপট (Penpot) - ফিগমার (Figma) ওপেন-সোর্স সমাধান, ৬১ হাজার স্টার, সাশ্রয় ₹১,৮৮০/মাস ১:১০ - #৩ চ্যাটারবক্স - ইলেভেনল্যাবসের মতো এআই ভয়েস, হিন্দিতেও কথা বলে, প্রতি মাসে ₹২,০৬৮ সাশ্রয় করে ১:১৮ - #২ চ্যাটউট - ইন্টারকমের পরিবর্তে, গ্রাহকদের সমস্ত চ্যাট একটি ইনবক্সে, প্রতি মাসে ₹৩,৬৬৬ সাশ্রয় করে ১:২৬ - #১ ওপেনএসইও - সেমরাশের বিকল্প, শুধুমাত্র এটি দিয়েই প্রতি মাসে ₹১৩,০০০+ সাশ্রয় হয় ১:৩৩ - মোট: প্রতি মাসে ₹২৮,৪২১, বছরে ₹৩.৪ লক্ষ ১:৩৮ - দ্রষ্টব্য: এরপর সবকিছু শূন্য হয়ে যাবে। এটি তখনই ঘটবে যদি আপনি নিজে হোস্ট করেন - সার্ভারের খরচ কম, এবং ওপেনএসইও-এর ডেটা এপিআই বিল আলাদা। ১:৪৮ - মন্তব্যগুলো সংরক্ষণ করুন, ১০টি লিঙ্কই ডিএম করুন, প্রতিষ্ঠাতাকে পাঠান, ১০,০০০ পর্যন্ত ফলো করুন। ১০টি রিপো সংরক্ষণ করুন (গিটহাব): #১০ ইমিচ - immich-app/immich #৯ ওপেনপ্রজেক্ট - opf/openproject #৮ ক্যাল.কম - calcom/cal.com #৭ ওপেনহুইস্পার - openwhispr/openwhispr #৬ অ্যাপফ্লোয়ি - AppFlowy-IO/AppFlowy #৫ ক্যাপ - CapSoftware/Cap #৪ পেনপট - penpot/penpot #৩ চ্যাটারবক্স - resemble-ai/chatterbox #২ চ্যাটউত - chatwoot/chatwoot #১ ওপেনএসইও - every-app/open-seo আপনি প্রথমে কোন টুলটি ব্যবহার করে দেখবেন? কমেন্ট করে জানান! যদি এটি কাজ করে, অনুগ্রহ করে ফলো/সাবস্ক্রাইব করুন। কৃতিত্ব: মূল ভিডিও - MadeToScale (@madetoscale2026) এটি একটি সম্পাদিত সংস্করণ, যেখানে হিন্দি এআই ভয়েসওভার রয়েছে। হ্যাশট্যাগ (বর্ণনার শেষে): #FreeSoftware #OpenSource #GitHub #FreeTools #SoftwareBill #SaveMoney #Immich #AppFlowy #Penpot #OpenSEO #HindiTech #YashDevCoder ট্যাগ (কমা দিয়ে আলাদা করা, ইউটিউব স্টুডিওতে): free github repos, open source tools Hindi, software bill save, Immich, OpenProject, Cal.com, AppFlowy, Penpot, OpenSEO, Chatwoot, free alternatives, Hindi tech tutorial, Yash Dev Coder [en-US] WAIT! Spending ₹28,421 Every Month on Software? These 10 FREE GitHub Repos Will Zero Out Your Bil... 1. ₹28,000/month software bill vs. ₹0? 10 free open-source replacements! 2. Semrush from ₹13,155 to ₹0? Top 10 free GitHub tools that save money! 3. Free software = weak? Wrong! 10 tools with 445,497+ GitHub stars Description (copy-paste - full): ₹28,000 per month on software? These 10 free GitHub repos reduce that bill to zero! Everyone thinks free software means weak software. Wrong! These 10 repos have a total of 445,497+ GitHub stars. TIMESTAMPS: 0:00 - ₹28,000 per month on software? 0:06 - Free = weak? Wrong! 0:14 - #10 Immich - Google Photos replacement, 1.17 lakh stars, saving ₹650/month 0:22 - #9 OpenProject - Easy replacement, saving ₹1,268/month 0:28 - #8 Cal.com - Calendly's open-source version, 49K stars, saving ₹1,128/month 0:37 - #7 OpenWhispr - Wispr Flow-like voice typing, offline too, saving ₹1,410/month 0:45 - #6 AppFlowy - Notion replacement, 77K stars, saving ₹1,504/month 0:53 - #5 Cap - Loom-like screen recording, saving ₹1,692/month 0:59 - Top 4 - The bill is really high here 1:03 - #4 Penpot - Figma's open-source answer, 61K stars, saving ₹1,880/month 1:10 - #3 Chatterbox - AI voice like ElevenLabs, also speaks Hindi, saving ₹2,068/month 1:18 - #2 Chatwoot - Instead of Intercom, all customer chats in one inbox, saving ₹3,666/month 1:26 - #1 OpenSEO - Semrush replacement, saves ₹13,000+ per month alone 1:33 - Total: ₹28,421/month, ₹3.4 lakh per year 1:38 - CATCH: it's all zero then This will happen if you host them yourself - small server costs, and OpenSEO's data API bill is separate. 1:48 - Save comments, DM all 10 links, send to the founder, follow up to 10,000. Save 10 REPOS (GitHub): #10 Immich - immich-app/immich #9 OpenProject - opf/openproject #8 Cal.com - calcom/cal.com #7 OpenWhispr - openwhispr/openwhispr #6 AppFlowy - AppFlowy-IO/AppFlowy #5 Cap - CapSoftware/Cap #4 Penpot - penpot/penpot #3 Chatterbox - resemble-ai/chatterbox #2 Chatwoot - chatwoot/chatwoot #1 OpenSEO - every-app/open-seo Which tool will you try first? Leave a comment! If this works, please follow/subscribe. Credit: Original video - MadeToScale (@madetoscale2026) This is an edited version with a Hindi AI voiceover. HASHTAGS (at the end of the description): #FreeSoftware #OpenSource #GitHub #FreeTools #SoftwareBill #SaveMoney #Immich #AppFlowy #Penpot #OpenSEO #HindiTech #YashDevCoder TAGS (comma separated, YouTube Studio me): free github repos, open source tools Hindi, software bill save, Immich, OpenProject, Cal.com, AppFlowy, Penpot, OpenSEO, Chatwoot, free alternatives, Hindi tech tutorial, Yash Dev Coder

    30 views

Achievements

Awards earned by the repositories immich-app owns. Select an award to embed its badge.

Gold
11st place finishes
Silver
12nd place finishes
Bronze
23rd place finishes
Awarded repositories
1Owned by immich-app now

Repositories

Ordered by gold, then silver, then bronze.

  1. immichBest: 1st by stars, 695 stars112

Every award

Top-three finishes of these repositories in completed trending days and weeks, newest first.

  1. immich
  2. immich
  3. immich
  4. immich

A repository earns an award for finishing first, second or third in a completed trending day or week, ranked by new stars, new forks or pull request authors. Awards follow a repository through renames and transfers and count toward its current owner. Weeks run Monday to Sunday, UTC.