Immich là app Flutter hiếm hoi dân self-host đều biết: backup kiểu Google Photos, album, tìm kiếm ML, và client mobile phải sống sót giữa mạng chập chờn cùng thư viện khổng lồ.
Stack thực tế
- Client Flutter iOS/Android (cùng surface web/desktop trong monorepo).
- Server NestJS với API client sinh tự động — OpenAPI giữ mobile và server trung thực.
- Service Python ML cho tìm kiếm kiểu CLIP và nhận diện.
- Docker là đường cài đặt chính thức.
Pattern đáng học
- API client sinh tự động. Đừng viết tay DTO cho domain lớn.
- Upload theo nền. Coi sync là feature sản phẩm, không phải việc thêm.
- Thumbnail do server giữ. Mobile không nên re-encode ảnh 48MP trên phone tầm trung.
Ghi chú Flutter
Gallery lớn phạt GridView ngây thơ. App kiểu Immich cần recycle view mạnh, chiến lược placeholder và isolate decode cẩn thận. Hãy học cách hàng đợi upload sống sót qua restart app.
Nếu copy một cách ngây thơ
- Kéo cả monorepo vào app nhỏ.
- Bỏ authz vì giả định “mạng cục bộ”.
- Ship tìm kiếm ML không có path rỗng/lỗi.
Hãy học hợp đồng client/server và thiết kế hàng đợi sync. Docker topology để sau.
Bài viết gốc đăng tại FlutterCook. Bản trên đó là bản được cập nhật mới nhất.
Nhận xét
Đăng nhận xét