Chuyển đến nội dung chính

Bài đăng

Hiển thị các bài đăng có nhãn Photos

Immich: bài học kiến trúc từ stack ảnh Flutter 100k sao

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 ...

Ente: ảnh mã hóa đầu-cuối trên Flutter

Nếu Immich là mặc định self-host, Ente là bản đối trọng privacy-first: client (gồm Flutter mobile) mã hóa trước khi upload, server chỉ giữ blob không đọc được. Nên học UX khóa. Recovery phrase và chia sẻ gia đình thắng dashboard “tin chúng tôi”. Pipeline encrypt-then-upload có resume. Surface sản phẩm cho Photos và secret kiểu Auth. Cạm bẫy User quên passphrase — thiết kế khôi phục tài khoản trước khi launch. Sinh thumbnail không được lộ plaintext trên thiết bị dùng chung. Hãy copy cuộc đối thoại threat model , không chỉ lựa chọn cipher. 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.

Immich: architecture lessons from a 100k-star Flutter photo stack

Immich is the rare Flutter app most self-hosters have heard of: Google-Photos-like backup, albums, ML search, and a mobile client that must survive flaky networks and huge libraries. What the stack actually is Flutter mobile clients for iOS/Android (plus web/desktop surfaces elsewhere in the monorepo). NestJS server with a generated API client — OpenAPI keeps mobile and server honest. Python ML services for CLIP-style search and recognition. Docker as the blessed install path for self-hosters. Patterns worth stealing Generated API clients. Do not hand-write DTOs for a large domain. Background-first upload. Treat sync as a product feature, not an afterthought. Server-owned thumbnails. Mobile should not re-encode a 48MP original on a mid-range phone. Flutter-specific notes Large galleries punish naive GridView s. Immich-style apps need aggressive view recycling, placeholder strategy, and careful isolate use for decode. Study how upload queues persist across app res...

Ente: end-to-end encrypted photos in Flutter

If Immich is the self-hosted default, Ente is the privacy-first counterpart: clients (including Flutter mobile) encrypt before upload, and the server stores blobs it cannot read. What to study Key UX. Recovery phrases and family sharing beat “trust us” dashboards. Encrypt-then-upload pipelines with resumable transfers. Product surfaces for Photos and Auth-style secrets. Pitfalls Users forget passphrases — design account recovery before launch. Thumbnail generation must not leak plaintext on shared devices. Copy the threat model conversation , not just the cipher choices. Originally published on FlutterCook . Read the latest version there — that copy is the one kept up to date.