0

[Open Source] #177 - Immich Power Tools: Hệ thống quản trị ảnh chuyên sâu với kiến trúc Satellite, truy vấn SQL trực tiếp và sức mạnh từ Google Gemini AI

Immich là một nền tảng quản lý ảnh tự lưu trữ (self-hosted) xuất sắc, nhưng với những người dùng sở hữu thư viện hàng trăm nghìn tấm ảnh, việc gộp khuôn mặt hàng loạt, sửa lỗi múi giờ hay tìm kiếm bằng ngôn ngữ tự nhiên vẫn là một thách thức. Immich Power Tools ra đời như một "Sidecar" mạnh mẽ, lấp đầy những khoảng trống đó. Bằng cách kết hợp giữa việc gọi API chính thống và khả năng truy vấn trực tiếp vào cơ sở dữ liệu của Immich, công cụ này mang lại hiệu suất xử lý dữ liệu hàng loạt vô địch và các tính năng AI thông minh.

Dưới góc độ kỹ thuật, dự án là một minh chứng xuất sắc cho việc ứng dụng kiến trúc Proxy Pattern, kỹ thuật Vector Search (Cosine Distance) và xử lý video động bằng Remotion.

Github: https://github.com/v8u7/immich-power-tools


🛠️ 1. Nền tảng công nghệ: Hybrid Data Orchestration

Immich Power Tools chọn một ngăn xếp công nghệ được tối ưu hóa cho bài toán "Big Data hình ảnh cá nhân":

  • Backend Core (Next.js 14): Sử dụng Next.js để xây dựng hệ thống API trung gian. Điểm sáng kỹ thuật nằm ở việc sử dụng Drizzle ORM để "chọc" trực tiếp vào database PostgreSQL của Immich, cho phép thực hiện các truy vấn thống kê và lọc dữ liệu phức tạp mà API gốc không thể đáp ứng về tốc độ.
  • AI Integration (Google Gemini): Tích hợp mô hình Gemini 1.5 Flash để xây dựng bộ máy phân tích ngôn ngữ tự nhiên (Natural Language Parser), giúp chuyển đổi các yêu cầu hội thoại thành tham số truy vấn dữ liệu chính xác.
  • Virtualization UI (TanStack Table & React Window): Để xử lý hàng nghìn bản ghi album hoặc hàng chục nghìn tấm ảnh mà không làm treo trình duyệt, dự án áp dụng kỹ thuật render ảo hóa (Windowing), chỉ tải các thành phần nằm trong khung nhìn người dùng.
  • Dynamic Media Rendering (Remotion): Sử dụng Remotion – một thư viện cho phép tạo video chuyên nghiệp hoàn toàn bằng mã nguồn React và TypeScript, phục vụ cho tính năng "Immich Rewind" (Tổng kết năm rực rỡ).

🏗️ 2. Trụ cột kiến trúc: Satellite Model và Proxy Security

Kiến trúc của dự án được thiết kế để hoạt động song song với hệ sinh thái Immich sẵn có:

  • Sidecar Integration Model: Thay vì thay thế Immich, Power Tools hoạt động như một vệ tinh. Nó chia sẻ cùng một hạ tầng Database nhưng cung cấp một lớp logic xử lý chuyên sâu hơn. Hệ thống tuân thủ nguyên tắc: Đọc từ DB (hiệu năng cao) và Ghi qua API (an toàn dữ liệu).
  • Secure API Proxying: Để bảo vệ thông tin nhạy cảm như API Keys, dự án triển khai lớp immich-proxy. Toàn bộ giao tiếp giữa trình duyệt và Immich đều đi qua Power Tools. Tại đây, hệ thống tự động tiêm (inject) các header bảo mật và thực hiện kiểm tra quyền trước khi gửi tới Immich API.
  • Stateless Metadata Links: Các liên kết chia sẻ hoặc lọc ảnh được thiết kế "không trạng thái" (Stateless) bằng cách mã hóa toàn bộ tham số lọc vào một JWT (JSON Web Token). Kỹ thuật này giúp hệ thống cực kỳ nhẹ vì không cần lưu trữ thêm bất kỳ dữ liệu cấu hình nào cho các link chia sẻ.

🔄 3. Workflow: Từ Câu hỏi người dùng đến Kết quả tìm kiếm (Sequence Diagram)

Sơ đồ mô tả quy trình hệ thống sử dụng AI để tìm kiếm ảnh một cách thông minh:

image.png


⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. Face Clustering via Cosine Distance: Power Tools thực hiện gộp khuôn mặt thông minh bằng cách tính toán khoảng cách Cosine giữa các Vector Embedding của khuôn mặt (đã được Immich tạo sẵn qua Machine Learning). Kỹ thuật này cho phép tìm ra những người giống nhau với độ chính xác cao ngay cả khi Immich chưa nhận diện được.
  2. Binary Streaming Proxy: Để hiển thị ảnh thumbnail và video một cách bảo mật mà không để lộ URL thật của Immich, dự án xây dựng một Endpoint API trả về dữ liệu nhị phân (Stream). Trình duyệt sẽ nhận dữ liệu theo luồng, giúp giảm độ trễ khi tải hàng trăm ảnh cùng lúc.
  3. Advanced Metadata Offsetting: Cung cấp bộ công cụ "phẫu thuật" metadata. Người dùng có thể dịch chuyển thời gian (Batch offset) của hàng loạt ảnh (ví dụ: cộng thêm 7 tiếng cho toàn bộ album do sai múi giờ), logic này được thực thi qua API Immich để đảm bảo metadata tệp tin vật lý cũng được đồng bộ.
  4. Heatmap Geospatial Analytics: Sử dụng thư viện Leaflet để quét tọa độ GPS từ hàng chục nghìn tấm ảnh trong database, sau đó thực hiện gom nhóm (Clustering) tại Backend để vẽ nên bản đồ nhiệt về các địa điểm người dùng đã đi qua.

⚖️ 5. So sánh chiến lược

Tiêu chí Immich Power Tools Immich (Mặc định) Dịch vụ AI Cloud
Xử lý hàng loạt Cực mạnh (Bulk Actions) Cơ bản Không có
Tìm kiếm AI Tích hợp Gemini (Linh hoạt) Smart Search nội bộ Rất tốt nhưng tốn phí
Tốc độ truy vấn Rất nhanh (SQL trực tiếp) Nhanh (API) Phụ thuộc Internet
Tính riêng tư Tuyệt đối (Self-host) Tuyệt đối Thấp
Tổng kết năm Có (Remotion video) Không có Có (Memory)

✅ Kết luận: Tại sao Immich Power Tools là trợ thủ đắc lực?

Immich Power Tools không chỉ là một công cụ tiện ích; nó là một bài học về tư duy mở rộng hệ thống. Bằng cách "đứng trên vai người khổng lồ" Immich và khai thác tối đa sức mạnh của AI hiện đại cùng SQL truyền thống, dự án đã tạo ra một trải nghiệm quản lý thư viện ảnh ở đẳng cấp hoàn toàn mới.

Đối với các kỹ sư Fullstack, nghiên cứu dự án này mang lại giá trị về:

  • Kỹ thuật xây dựng Satellite Apps kết nối trực tiếp DB.
  • Cách ứng dụng Gemini AI để xây dựng bộ lọc dữ liệu thực tế.
  • Tư duy xử lý Lưới dữ liệu khổng lồ (Virtualization) trên trình duyệt.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí