Dọn dẹp 200GB iCloud của tôi bằng JavaScript
(andykong.org)- Khi dung lượng iCloud tiến gần giới hạn 200GB và riêng ảnh đã chiếm khoảng 127GB, tác giả thử một cách vòng vo là tự tìm và xóa các video lớn thay vì nâng cấp lên 1TB
- Apple Photos và web iCloud không có sắp xếp theo kích thước tệp, còn các ứng dụng bên thứ ba cũng hiển thị ảnh đã được offload lên iCloud như 0B nên khó dùng làm tiêu chí dọn dẹp
- Tận dụng việc huy hiệu thời lượng phát video trên iCloud Photos web là phần tử HTML
video-text-badge, tác giả dùng JavaScript để tìm các video dài và đánh dấu bằng viền đỏ - Sau khi tải xuống rồi xóa các video dài hơn 30 giây, tổng dung lượng tệp tải xuống chỉ khoảng 7GB nhưng dung lượng iCloud lại giảm tới khoảng 55GB, tạo ra chênh lệch ngoài dự đoán
- Các video 4K mới có kích thước tệp và mức thay đổi hiển thị trên iCloud gần như khớp nhau, nhưng video cũ lại bị iCloud tính lớn hơn tệp thực tế, nên các video cũ dung lượng lớn có thể là ưu tiên dọn dẹp
Lọc ra các video dài trên web iCloud
- Sau cảnh báo dung lượng từ Apple, tác giả bắt đầu tìm phương án thay thế vì nâng từ 200GB lên 1TB sẽ làm chi phí tăng hơn 3 lần
- Phần lớn dung lượng là ảnh, chiếm khoảng 127GB, nhưng Apple Photos và trình duyệt iCloud không có tính năng sắp xếp ảnh theo kích thước tệp
- Các ứng dụng hiển thị ảnh trùng lặp hoặc kích thước tệp video cũng không giúp ích nhiều vì ảnh đã offload lên iCloud bị hiện như 0B
- Truy cập
Photos -> Media Types -> Videostrên website iCloud, rồi thu nhỏ màn hình tối đa để thấy được nhiều video cùng lúc - Tác giả nhận ra nếu huy hiệu thời lượng phát của từng video là phần tử HTML thì có thể tìm kiếm và lọc bằng JavaScript, nên đã viết mã để làm nổi bật các video dài
- Lớp của huy hiệu thời lượng phát là
video-text-badge - Tìm các huy hiệu trong trang, sắp xếp theo thời lượng phát và nhấn mạnh các mục vượt quá ngưỡng nhất định
- Vì iCloud chỉ tải các phần tử đang hiển thị trên màn hình, mã được chạy lặp lại bằng bộ đếm thời gian để xử lý cả các phần tử mới xuất hiện khi cuộn
- Lớp của huy hiệu thời lượng phát là
- Cách dùng là mở console JavaScript trên trang iCloud rồi dán toàn bộ gist vào
- Kết quả là các video dài hơn 20 giây được đánh dấu bằng khung đỏ, giúp dễ chọn nhiều video lớn để tải xuống rồi xóa
Thay đổi dung lượng sau khi xóa và hai lần thử nghiệm
- Khi dùng script để xóa toàn bộ video trên iCloud dài hơn 30 giây, tổng video tải xuống chỉ khoảng 7GB nhưng dung lượng iCloud lại giảm tới khoảng 55GB
- Toàn bộ video tải xuống chiếm 8GB trên ổ đĩa
- Mức sử dụng iCloud giảm từ 199GB xuống 143GB
- Ở thử nghiệm đầu tiên, tác giả tải lên một video 4K có nhiều chuyển động để kiểm tra phản ứng của dung lượng iCloud
- Kích thước tệp tải lên là 281MB
- Sau khi tải lên, mức sử dụng iCloud là 145.33GB
- Sau khi tải xuống rồi xóa, tệp vẫn là 281MB
- Sau khi xóa, mức sử dụng iCloud hiển thị là 145.6GB, nên chênh lệch giá trị hiển thị chỉ khoảng 270MB
- Ở thử nghiệm thứ hai, tác giả chọn một video cũ ngắn mà iCloud hiển thị là tệp lớn để kiểm tra
- iCloud hiển thị video đó là 128MB
- Tệp tải xuống chỉ là 47MB
- Mức sử dụng iCloud trước khi xóa là 145.29GB, sau khi xóa là 145.12GB, giảm khoảng 170MB
- Xóa khoảng 7GB tệp nhưng giải phóng được hơn 7 lần số dung lượng đó, cho thấy các video cũ dung lượng lớn dường như có mức chiếm dụng lưu trữ trên iCloud lớn hơn tệp thực tế
- Dù chưa xác định được nguyên nhân, kết quả là tác giả đã giải phóng được hơn 50GB dung lượng iCloud và vẫn còn một script JavaScript nhỏ để lặp lại công việc này
1 bình luận
Ý kiến trên Hacker News
Trong Photos.app không hiển thị kích thước tệp, nên đã nghĩ tới việc làm một tiện ích mở rộng cho Photos.app hoặc một ứng dụng riêng để tìm các tệp lớn
Nhưng có vẻ API không lộ ra “kích thước tệp”, hoặc ít nhất tôi không tìm được cách đơn giản nào
Tôi xem “ảnh” hay “video” giống như một view hiển thị “photo or video object” nền tảng bên dưới. Ngay cả khi cắt video thì video gốc đầy đủ vẫn còn, và có vẻ chỉ khi xuất ra thì mới thực sự tạo ra tệp đã cắt với kích thước nhỏ hơn
Có lẽ đó là lý do khiến kích thước tệp trông khác nhau. Ngoài ra có người nói đã tạo một AppleScript để truy vấn kích thước tệp: https://discussions.apple.com/docs/DOC-250000422
Tôi tò mò bạn đã tìm “kích thước tệp” trong API nào
Tôi đã có thể lấy dữ liệu kích thước từ Photos.app bằng PhotoKit API: https://alexwlchan.net/2023/finding-big-photos/
Tôi chỉ thử trên thư viện của mình với khoảng 26 nghìn mục, nhưng nó hữu ích như một chỉ dấu để tìm các mục lớn nhất. Tuy vậy tôi chưa xác minh được liệu xuất một video 1GB có làm mức sử dụng iCloud giảm đúng 1GB hay không
Vì thế một bức ảnh mới nhập nhìn như chỉ có một thumbnail trong thư viện thực ra có thể là 5MB hoặc cũng có thể là 50MB
Điều đó cũng giải thích vì sao dung lượng iPhone luôn sát giới hạn dù đã quản lý quá ám ảnh như vậy
osxphotos query --min-size 100MB --add-to-album "Big Files"Lệnh này tìm mọi ảnh và video lớn hơn 100MB rồi thêm vào album “Big files”
Để biết thêm chi tiết, xem
osxphotos query --help, hoặc dùngosxphotos docsđể mở tài liệu trong trình duyệt. Xin lưu ý đây là công cụ tôi tạo raCó thể là lỗi, nhưng trong một số trường hợp iCloud có thể đang âm thầm lưu nhiều phiên bản của cùng một tệp. Apple cũng từng làm điều tương tự với các tệp media khác
Ví dụ cuối cùng rất thú vị:
“iCloud nói video là 128MB, nhưng khi tải xuống thì video thật chỉ là 48MB, và sau khi xóa thì dung lượng trống tăng khoảng 170MB”
Điều này gợi ý rằng không phải iCloud chỉ đơn giản hiển thị sai kích thước của tệp ví dụ. Nếu xóa một tệp 128MB thì dung lượng iCloud cũng chỉ nên trống thêm khoảng 128MB, nhưng trên thực tế dung lượng được giải phóng gần với 176MB, tức là tổng của kích thước hiển thị 128MB và bản tải xuống 48MB. Nếu iCloud làm tròn dung lượng trống theo đơn vị 10MB thì điều này khá khớp
Kết quả là người dùng ngày càng bị khóa chặt vào một dịch vụ lưu trữ, trả phí định kỳ theo tổng dung lượng, nhưng gần như không có thông tin về cách tối ưu phần dung lượng đó. Từ góc nhìn người tiêu dùng muốn ở lại trong một mức phí cố định hoặc giảm tỷ lệ chi phí/dung lượng, cảm giác như chỉ còn cách buông tay và tiếp tục trả thêm tiền
Chiến lược kinh doanh hiện đại của ngành công nghệ là ẩn mình sau sự phức tạp. Chi phí thì quá phức tạp để hiểu, hoặc việc giải thích sẽ lộ quá nhiều thông tin nội bộ cho đối thủ. Thế nhưng khi công ty cần kiểm tra xem mình có vận hành vượt quá chi phí hay không, họ vẫn bằng cách nào đó tính ra được các chỉ số đó. Còn khi người tiêu dùng cố hiểu thì đột nhiên mọi thứ lại trở nên quá phức tạp
Vấn đề là công nghệ thường thực sự phát triển đến quy mô quá phức tạp, và giới điều hành biết điều đó nên đây trở thành một cái cớ khá hiệu quả. Và thật tiện là họ tập trung đầu tư đúng vào điểm đó rồi cộng thêm biên lợi nhuận
Tệp đã cắt nhỏ hơn kích thước iCloud hiển thị, nhưng khi chọn tải xuống bản gốc chưa chỉnh sửa thì kích thước khớp với kích thước iCloud đã hiển thị
Vì vậy khi đồng bộ ảnh lên iCloud, không phải chỉ từng tệp riêng lẻ được đồng bộ mà là container “Photos Library” do ứng dụng Photos quản lý
Nếu bạn thêm trực tiếp từng tệp trong Finder hoặc ứng dụng Files thì kích thước sẽ khớp chính xác giữa iCloud và hệ thống tệp cục bộ
Khi mua ổ cứng hay USB, bạn có một số GB nhất định để dùng theo ý mình. Nếu chép vào một tệp 1GB thì dung lượng trống giảm 1GB. Tùy hệ thống tệp bạn có thể mất thêm vài KB metadata, nhưng việc chọn hệ thống tệp là do người dùng quyết định chứ không phải thiết bị lưu trữ ép buộc
Dù bộ điều khiển NAND có dùng vài MB vùng overprovisioning để lưu bảng ánh xạ khối, hay có lưu bản sao dữ liệu vì lý do tiện lợi, người dùng cũng không bị tính phí cho vùng overprovisioning đó
Ở đây họ bán một thiết bị lưu trữ truy cập qua HTTP, nhưng khi bạn ghi một tệp 1GB thì vì sự tiện lợi của họ, họ sao chép/chuyển đổi nó rồi tính phí luôn cả phần lưu trữ của các bản sao mà người dùng không hề yêu cầu. Điều này là mới lạ và khó lường
Ý tưởng/giải pháp này đã được chuyển thành script TamperMonkey/Greasemonkey
Đồng thời cũng thêm chức năng “ẩn” mọi phần tử không đáp ứng tiêu chí
https://github.com/seffignoz/icloudcleanup
Đây cũng là một trong những lý do tôi tự host. Tôi không tin vào sự rõ ràng và minh bạch của các nhà cung cấp đám mây. Ngay cả khi các giải pháp tự host kém ổn định hơn, kém an toàn hơn và hiệu năng thấp hơn nhiều, có lẽ tôi vẫn sẽ không đổi
Cá nhân tôi đang dùng immich. Đây là một giải pháp khá hoàn thiện, có ứng dụng iOS/Android, thành phần máy chủ và các tùy chọn đồng bộ/sao lưu
https://immich.app/
Google làm vậy. Nếu xem https://one.google.com/storage và https://photos.google.com/quotamanagement, chúng giúp bạn dễ tìm những thứ để xóa, và rốt cuộc được thiết kế để khiến bạn mệt mỏi vì xóa rồi mua thêm dung lượng
Theo tôi biết, iCloud lưu bản gốc đầy đủ chất lượng, còn trên điện thoại thì tải xuống bản tối ưu hóa chất lượng thấp hơn
Trong cài đặt iPhone, vào
Apple ID > iCloud > Photossẽ có tùy chọn “Optimise iPhone Storage”, mặc định là bậtPhần mô tả tùy chọn này nói rằng khi điện thoại thiếu dung lượng, ảnh và video độ phân giải đầy đủ sẽ tự động được thay bằng các phiên bản nhỏ hơn dành cho thiết bị, còn bản độ phân giải đầy đủ có thể tải xuống từ iCloud bất cứ lúc nào
Điều này nghe khá hợp lý
Đây là nội dung về dung lượng lưu trữ trên điện thoại có thể xem trong Settings > Manage storage, không liên quan đến dung lượng lưu trữ đám mây
Bài viết thú vị. Tôi cũng phải nâng gói iCloud vì vấn đề tương tự, nên từ góc nhìn của Apple thì có thể đây không phải ưu tiên cao để sửa
Khi chụp RAW+JPEG, Apple Photos sẽ ghép hai ảnh lại với nhau. Đây không phải cách làm quá hiếm với người thích nhiếp ảnh, và nó hữu ích vì không làm thư viện chất đầy những ảnh gần như trùng lặp, đồng thời có thể chuyển đổi giữa RAW và JPEG dễ dàng
Nhưng vì cách ghép này và thiết kế hệ thống tệp được mô tả trong bài, có vẻ không thể tách chúng ra dễ dàng để chỉ xóa RAW. Tôi có những tệp RAW khổng lồ từ nhiều năm trước mà chắc chắn sẽ không bao giờ đụng tới nữa, nhưng lại không thể xóa vì muốn giữ các tệp JPEG nhỏ hơn nhiều
Có vẻ cách dễ nhất là xuất bản gốc, xóa khỏi thư viện rồi chỉ nhập lại JPEG
nhưng như vậy sẽ mất số metadata tích lũy suốt nhiều năm trong thư viện
Vì thế tôi không còn cách nào khác ngoài việc nâng gói
Nếu ý bạn là các tính năng bổ sung như nhận diện khuôn mặt, thì sau khi nhập lại JPEG, ứng dụng sẽ không xử lý lại sao?
osxphotos export /path/to/export --has-raw --skip-raw --exiftoolLệnh này sẽ xuất mọi ảnh có cặp RAW nhưng bỏ qua thành phần RAW, và dùng exiftool(https://exiftool.org/) để ghi metadata như từ khóa vào tệp JPEG đã xuất. Sau đó có thể kéo vào Photos hoặc chạy
osxphotos import /path/to/export/*để nhập lạiCác lệnh export và import còn có nhiều tùy chọn khác để kiểm soát thư mục xuất, v.v. Có thể dùng
osxphotos help export, hoặcosxphotos docsđể mở tài liệu trong trình duyệt. Nhân tiện, tôi là tác giả của osxphotosCó vẻ nếu chạy File/Export Unmodified Originals thì nó sẽ xuất RAW+HEIC cùng với một tệp sidecar riêng chứa metadata. Sau đó bạn có thể dọn riêng tệp RAW rồi nhập tệp HEIC, và nghe nói tệp metadata sidecar cũng sẽ được nhập tự động
Tuy vậy, bạn sẽ mất các chỉnh sửa. Dù thế, có vẻ bằng cách nào đó vẫn có thể “copy edits”. Nếu rành kỹ thuật thì chắc có thể tự động hóa quy trình này bằng AppleScript
Nhưng đây là một việc phiền phức không cần thiết và đáng ra phải là tính năng tích hợp sẵn trong Photos.app. Rõ ràng vì nó giúp đẩy người dùng lên gói iCloud đắt hơn nên mức ưu tiên thấp
Thật trùng hợp là trước kỳ nghỉ lễ tôi cũng nhận được cảnh báo dung lượng lưu trữ tương tự từ Apple, và đã quyết định tải toàn bộ ảnh/video về máy chủ media của mình thay vì tiếp tục đưa lên iCloud
Không có cách nào dễ dàng và trực quan để tải archive từ iCloud xuống. Tôi đang xử lý dần dần bằng nhiều máy và thiết bị khác nhau
Vấn đề với những thay đổi gần đây của Apple là họ tăng giá mà hầu như không có lý do rõ ràng. Chúng ta sẽ vẫn tiếp tục chụp ảnh và quay video, còn kích thước tệp thì chỉ có thể tiếp tục tăng lên vì công nghệ và tính năng mới nhất
Nó hoạt động tương tự Google Takeout. Trên Mac, iPhone, iPad hoặc PC, đăng nhập vào trang tài khoản Apple ID tại appleid.apple.com, vào “Data & Privacy”, rồi chọn “Manage Your Data and Privacy”
Ở trang tiếp theo, vào “Get a copy of your data” và chọn “Get started”
https://github.com/icloud-photos-downloader/icloud_photos_downloader
Nếu cần, nó cũng có thể tải ảnh từ iCloud xuống và chuyển đổi định dạng. Cứ vài ngày tôi lại gửi ảnh mới sang NAS để luôn có bản sao cục bộ, và các bản sao này cũng được backup lên Backblaze B2 mỗi đêm
Nhờ chuyển đổi định dạng, tôi có thể giữ ảnh dưới dạng cặp HEIC+JPG để có cả bản gốc lẫn phiên bản dễ sử dụng hơn
Điều tôi thực sự muốn là một công cụ làm điều tương tự cho iCloud Drive. Tôi để khá nhiều tài liệu ở đó và thấy khó chịu vì không có cách backup hợp lý. Cách Apple khuyến nghị(https://support.apple.com/en-us/HT204055) khá đáng thất vọng
Điều tôi ghét nhất là bậc gói dung lượng kỳ quặc nhảy từ 200GB lên 2TB. Không có cách nào trả thêm theo từng mức 500GB hoặc 1TB, vốn sẽ rất vừa cho nhiều gia đình
Trong thời đại mà dung lượng lưu trữ đã trở thành hàng hóa phổ thông, nên tính phí theo số GB đã dùng
Thứ chiếm phần lớn dung lượng iCloud của tôi là các phiên bản video “live” của ảnh. Chúng còn nặng hơn cả ảnh có kèm một đoạn chuyển động rất ngắn
Cách xử lý duy nhất tôi tìm được đến giờ là tải tệp về máy, xóa chúng khỏi iCloud, sau đó xóa video cục bộ và chỉ tải lại ảnh tĩnh còn lại lên
Nó rất tốn thời gian và thô sơ, và trong quá trình đó tôi luôn lo sẽ xóa nhầm thứ gì hoặc làm mất thứ quan trọng
Tôi tự hỏi có công cụ nào có thể tự động hóa quy trình này, đồng thời vẫn cung cấp mức kiểm soát chỉnh sửa nào đó để xác định và giữ lại số ít ảnh “live” mà tôi thực sự muốn lưu không
Hay là tôi đã đọc đúng?
Nếu đây là hiện tượng phổ biến thì có thể xem như Apple đã thổi phồng con số để thúc ép người dùng nâng cấp, và chuyện này thậm chí có thể dẫn tới kiện tụng chứ?
Tôi không phải chuyên gia pháp lý
Khi bạn thêm ảnh hoặc video, ứng dụng Photos sẽ phân tích chúng và lưu nhiều metadata cần thiết để ứng dụng hoạt động, bao gồm cả lịch sử chỉnh sửa. Cuối cùng tất cả những thứ này đều được đồng bộ lên iCloud
Có thể Apple vẫn đang dùng một định dạng hệ thống tệp cũ trên iCloud. Nó đã tồn tại khá lâu rồi và có thể họ không bận tâm thay đổi định dạng lưu trữ. Cũng có khả năng ảnh/video trong các tài khoản cũ đang nằm trên các ổ đĩa “cũ”