Pekerjaan Merapikan iCloud 200GB Saya dengan JavaScript
(andykong.org)- Ketika kapasitas penyimpanan iCloud mendekati batas 200GB dan foto saja memakan sekitar 127GB, saya mencoba jalan memutar dengan mencari dan menghapus video besar sendiri alih-alih upgrade ke 1TB
- Apple Photos dan web iCloud tidak memiliki pengurutan berdasarkan ukuran file, dan aplikasi terpisah pun menampilkan foto yang di-offload ke iCloud seolah-olah 0B, sehingga sulit dipakai sebagai acuan untuk merapikan
- Dengan memanfaatkan fakta bahwa badge durasi pemutaran video di web iCloud Photos adalah elemen HTML
video-text-badge, saya menandai video panjang dengan bingkai merah menggunakan JavaScript - Setelah mengunduh dan menghapus video berdurasi lebih dari 30 detik, file yang diunduh hanya sekitar 7GB, tetapi penyimpanan iCloud berkurang sekitar 55GB, selisih yang tidak terduga
- Untuk video 4K baru, ukuran file dan perubahan yang ditampilkan iCloud hampir sesuai, tetapi video lama dihitung lebih besar di iCloud daripada file aslinya, sehingga video lama berukuran besar bisa menjadi prioritas untuk dirapikan
Memilah video panjang di web iCloud
- Setelah peringatan penyimpanan dari Apple, menaikkan paket dari 200GB ke 1TB akan membuat biaya melonjak lebih dari 3 kali lipat, jadi saya mulai mencari alternatif
- Sebagian besar penyimpanan adalah foto dan memakan sekitar 127GB, tetapi Apple Photos dan browser iCloud tidak memiliki fitur untuk mengurutkan foto berdasarkan ukuran file
- Aplikasi yang menampilkan foto duplikat atau ukuran file video pun menampilkan foto yang di-offload ke iCloud seolah-olah 0B, sehingga tidak banyak membantu untuk merapikan secara nyata
- Setelah membuka
Photos -> Media Types -> Videosdi situs iCloud, saya memperkecil tampilan layar semaksimal mungkin agar banyak video terlihat sekaligus - Jika badge durasi tiap video adalah elemen HTML, saya menganggapnya bisa dicari dan difilter dengan JavaScript, lalu menulis kode untuk menyorot video panjang
- Kelas badge durasi pemutaran adalah
video-text-badge - Kode mencari badge di dalam halaman, mengurutkannya berdasarkan durasi pemutaran, lalu menyorot item yang melewati ambang tertentu
- Karena iCloud hanya memuat elemen yang tampil di layar, kode dijalankan berulang dengan timer agar elemen baru yang masuk saat discroll juga ikut diproses
- Kelas badge durasi pemutaran adalah
- Cara menggunakannya adalah membuka konsol JavaScript di halaman iCloud lalu menempelkan seluruh gist
- Hasilnya, video yang lebih panjang dari 20 detik ditandai dengan kotak merah, sehingga lebih mudah memilih beberapa video besar, mengunduhnya, lalu menghapusnya
Perubahan penyimpanan setelah penghapusan dan dua eksperimen
- Saat semua video iCloud yang berdurasi lebih dari 30 detik dihapus dengan skrip, video yang diunduh sekitar 7GB, tetapi penyimpanan iCloud berkurang sekitar 55GB
- Total video yang diunduh memakan 8GB di disk
- Penggunaan iCloud turun dari 199GB menjadi 143GB
- Pada eksperimen pertama, saya mengunggah video 4K dengan banyak gerakan untuk melihat respons penyimpanan iCloud
- Ukuran file yang diunggah adalah 281MB
- Setelah diunggah, penggunaan iCloud adalah 145,33GB
- Setelah diunduh dan dihapus, filenya tetap 281MB
- Setelah dihapus, penggunaan iCloud ditampilkan sebagai 145,6GB, sehingga selisih nilai yang ditampilkan sekitar 270MB
- Pada eksperimen kedua, saya memilih video pendek lama yang ditampilkan iCloud sebagai file besar untuk diperiksa
- iCloud menampilkan video tersebut sebagai 128MB
- File yang diunduh berukuran 47MB
- Penggunaan iCloud sebelum penghapusan adalah 145,29GB, dan setelah penghapusan 145,12GB, turun sekitar 170MB
- Dengan menghapus file sekitar 7GB, ruang penyimpanan yang terbebas lebih dari 7 kali lipat, dan video lama berukuran besar tampaknya memiliki jejak penyimpanan di iCloud yang lebih besar daripada file aslinya
- Penyebabnya tidak terkonfirmasi, tetapi pada akhirnya saya berhasil mengosongkan lebih dari 50GB penyimpanan iCloud dan menyisakan skrip JavaScript kecil yang bisa dipakai lagi untuk pekerjaan serupa
1 komentar
Pendapat di Hacker News
Karena Photos.app tidak menampilkan ukuran file, saya sempat berpikir untuk membuat ekstensi Photos.app atau aplikasi terpisah yang bisa menemukan file besar
Namun API-nya tampaknya tidak mengekspos “ukuran file”, dan setidaknya saya tidak menemukan cara yang sederhana
Saya melihat “foto” atau “video” lebih sebagai view yang menampilkan underlying “photo or video object”. Kalau video dipotong, seluruh video asli tetap ada, dan sepertinya ukuran file yang lebih kecil dari hasil potongan baru benar-benar muncul setelah diekspor
Jadi mungkin itu sebabnya ukuran file terlihat berbeda. Selain itu, katanya ada seseorang yang membuat AppleScript untuk mengecek ukuran file: https://discussions.apple.com/docs/DOC-250000422
Saya penasaran, di API mana Anda mencari “ukuran file” itu
Dengan API PhotoKit, data ukuran dari Photos.app bisa diambil: https://alexwlchan.net/2023/finding-big-photos/
Saya hanya mengujinya pada library saya yang berisi sekitar 26 ribu item, tetapi cukup berguna sebagai metrik untuk menemukan item terbesar. Namun saya belum memastikan apakah mengekspor video 1GB akan mengurangi penggunaan iCloud sebesar 1GB
Jadi foto yang baru saja diimpor dan terlihat sebagai satu thumbnail di library sebenarnya bisa berukuran 5MB atau 50MB
Ini juga menjelaskan mengapa penyimpanan iPhone selalu hampir penuh meskipun dikelola dengan begitu obsesif
osxphotos query --min-size 100MB --add-to-album "Big Files"Perintah ini menemukan semua foto dan video yang lebih besar dari 100MB dan menambahkannya ke album “Big files”
Untuk detailnya, lihat
osxphotos query --help; untuk membuka dokumentasi di browser, lihatosxphotos docs. Sebagai catatan, saya yang membuat alat iniBisa saja ini bug, tetapi dalam beberapa kasus ada kemungkinan iCloud diam-diam menyimpan beberapa versi dari file yang sama. Apple juga melakukan hal serupa pada file media lain
Contoh terakhir menarik:
“iCloud mengatakan videonya 128MB, tetapi ketika diunduh, video sebenarnya 48MB, dan saat dihapus, ruang kosong bertambah sekitar 170MB”
Ini mengisyaratkan bahwa iCloud bukan sekadar salah menampilkan ukuran file contoh. Kalau file 128MB dihapus, ruang iCloud seharusnya hanya bertambah sekitar 128MB, tetapi kenyataannya ruang yang kosong mendekati 176MB, yaitu gabungan ukuran yang ditampilkan 128MB dan versi yang diunduh 48MB. Jika iCloud menampilkan ruang kosong dengan pembulatan per 10MB, ini terlihat cukup masuk akal
Pada akhirnya, kita semakin terikat pada suatu layanan penyimpanan, membayar langganan berkala berdasarkan total kapasitas, tetapi hampir tidak punya informasi tentang cara mengoptimalkan penyimpanan itu. Dari sudut pandang konsumen yang ingin tetap berada di tier biaya tetap atau menurunkan rasio penyimpanan/biaya, rasanya seperti hanya bisa pasrah dan terus membayar lebih
Strategi bisnis modern industri teknologi adalah bersembunyi di balik kompleksitas. Biayanya terlalu rumit untuk dipahami, atau terlalu banyak mengungkap informasi internal kepada pesaing, dan semacamnya. Namun ketika harus memastikan apakah perusahaan beroperasi di atas biaya, metrik seperti itu entah bagaimana tetap bisa dihitung. Saat konsumen mencoba memahaminya, tiba-tiba semuanya menjadi terlalu rumit
Masalahnya, teknologi memang sering berkembang sampai skala yang benar-benar terlalu kompleks, dan para eksekutif juga tahu ini, sehingga itu menjadi alasan yang cukup efektif. Dan secara praktis, justru di titik itulah investasi dipusatkan dan margin ditambahkan
File yang dipotong lebih kecil daripada ukuran yang ditampilkan iCloud, tetapi ketika saya memilih untuk mengunduh versi asli yang belum dimodifikasi, ukurannya cocok dengan ukuran yang ditampilkan iCloud
Jadi ketika foto disinkronkan ke iCloud, yang disinkronkan bukan hanya file individual, melainkan kontainer “Photos Library” yang dikelola aplikasi Photos
Jika file individual ditambahkan langsung lewat Finder atau aplikasi Files, ukurannya di iCloud dan sistem file lokal cocok secara akurat
Kalau membeli hard disk atau USB stick, kita bisa memakai sejumlah GB tertentu sesuka kita. Jika memasukkan file 1GB, ruang kosong berkurang 1GB. Tergantung sistem file, mungkin ada beberapa KB metadata yang hilang, tetapi pilihan sistem file ada pada pengguna dan tidak dipaksakan oleh perangkat penyimpanan
Kalaupun controller NAND memakai beberapa MB area overprovisioning untuk menyimpan tabel pemetaan blok, atau menyimpan data secara duplikat demi kemudahan, pengguna tidak ditagih untuk biaya area overprovisioning itu
Di sini mereka menjual perangkat penyimpanan yang diakses lewat HTTP, lalu ketika pengguna menulis file 1GB, mereka mereplikasi/mengonversinya demi kenyamanan mereka sendiri dan menagih pengguna juga untuk biaya penyimpanan salinan yang tidak diminta itu. Ini baru dan tidak terduga
Ide/solusi ini diubah menjadi skrip TamperMonkey/Greasemonkey
Juga menambahkan fitur untuk “menyembunyikan” semua elemen yang tidak sesuai kriteria
https://github.com/seffignoz/icloudcleanup
Ini salah satu alasan saya melakukan self-hosting. Saya tidak percaya pada kejelasan dan transparansi penyedia cloud. Meskipun solusi self-hosting jauh kurang stabil, kurang aman, dan performanya lebih rendah, saya mungkin tidak akan beralih
Secara pribadi saya memakai immich. Ini solusi yang cukup matang, dengan aplikasi iOS/Android, komponen server, serta opsi sinkronisasi/backup
https://immich.app/
Google melakukannya. Kalau melihat https://one.google.com/storage dan https://photos.google.com/quotamanagement, strukturnya membantu pengguna menemukan item yang bisa dihapus, lalu pada akhirnya membuat mereka lelah menghapus dan membeli penyimpanan tambahan
Sepengetahuan saya, iCloud menyimpan orisinal berkualitas penuh, lalu mengunduh versi teroptimasi dengan kualitas lebih rendah ke ponsel
Di pengaturan iPhone, jika masuk ke
Apple ID > iCloud > Photos, ada opsi “Optimise iPhone Storage” yang aktif secara defaultDeskripsi opsi ini mengatakan bahwa jika ruang di ponsel menipis, foto dan video resolusi penuh akan otomatis diganti dengan versi yang lebih kecil untuk perangkat, dan versi resolusi penuh dapat diunduh kapan saja dari iCloud
Ini terlihat cukup masuk akal
Ini tentang penyimpanan ponsel yang bisa dilihat di Settings > Manage storage, dan tidak ada kaitannya dengan penyimpanan cloud
Tulisan yang menarik. Saya juga harus menaikkan paket iCloud karena masalah serupa, jadi dari sisi Apple mungkin prioritas untuk memperbaikinya tidak tinggi
Jika memotret dalam RAW+JPEG, Apple Photos mengelompokkan kedua gambar itu. Ini juga bukan cara yang sangat jarang di kalangan penggemar fotografi, dan berguna karena kita bisa dengan mudah beralih antara RAW dan JPEG tanpa menumpuk banyak foto yang mirip duplikat di library
Namun karena cara penggabungan ini dan desain sistem file yang dijelaskan dalam tulisan, tampaknya tidak mungkin memisahkan keduanya dengan mudah lalu hanya menghapus RAW. Setelah bertahun-tahun, ada file RAW berukuran besar yang tidak akan pernah saya sentuh lagi, tetapi saya tidak bisa menghapusnya karena ingin tetap menyimpan JPEG yang jauh lebih kecil
Cara paling mudah tampaknya mengekspor orisinalnya, menghapusnya dari library, lalu mengimpor kembali hanya JPEG, tetapi dengan begitu metadata bertahun-tahun yang sudah terkumpul di library akan hilang
Jadi saya tidak punya pilihan selain menaikkan paket
Kalau yang dimaksud fitur tambahan seperti pengenalan wajah, bukankah setelah JPEG diimpor kembali aplikasinya akan memprosesnya lagi?
osxphotos export /path/to/export --has-raw --skip-raw --exiftoolIni mengekspor semua gambar yang memiliki pasangan RAW, tetapi melewati komponen RAW, lalu menggunakan exiftool(https://exiftool.org/) untuk menulis metadata seperti keyword ke file JPEG yang diekspor. Setelah itu, Anda bisa mengimpornya kembali dengan menyeretnya ke Photos atau menjalankan
osxphotos import /path/to/export/*Perintah export dan import juga punya banyak opsi lain untuk mengontrol direktori ekspor dan sebagainya. Gunakan
osxphotos help export, atauosxphotos docsuntuk membuka dokumentasi di browser. Sebagai catatan, saya adalah pembuat osxphotosKalau menjalankan File/Export Unmodified Originals, tampaknya RAW+HEIC dan file sidecar terpisah berisi metadata akan diekspor. Setelah itu, jika file RAW disisihkan dan file HEIC diimpor, katanya file metadata sidecar juga otomatis ikut diimpor
Namun hasil edit akan hilang. Meski begitu, somehow sepertinya “copy edits” bisa dilakukan. Orang yang cukup teknis mungkin bisa mengotomatiskan proses ini dengan AppleScript
Tetapi ini merepotkan tanpa perlu, dan seharusnya menjadi fitur bawaan di Photos.app. Karena membantu mendorong pengguna ke paket iCloud yang lebih tinggi, jelas prioritasnya rendah
Anehnya, sebelum liburan saya menerima notifikasi penyimpanan serupa dari Apple, dan memutuskan untuk mengunduh semua foto/video ke server media saya alih-alih menyimpannya di iCloud
Tidak ada cara yang mudah dan intuitif untuk mengunduh arsip dari iCloud. Saya sedang melakukannya perlahan dengan beberapa mesin dan perangkat
Masalah dari perubahan Apple belakangan ini adalah mereka menaikkan harga tanpa alasan jelas. Kita akan terus mengambil foto dan video, dan karena teknologi serta fitur terbaru, ukuran file mau tidak mau akan terus membesar
Cara kerjanya mirip Google Takeout. Di Mac, iPhone, iPad, atau PC, masuk ke halaman akun Apple ID di appleid.apple.com, buka “Data & Privacy”, lalu pilih “Manage Your Data and Privacy”
Di halaman berikutnya, buka “Get a copy of your data” lalu pilih “Get started”
https://github.com/icloud-photos-downloader/icloud_photos_downloader
Jika perlu, ia juga bisa mengunduh foto dari iCloud dan mengonversi format. Setiap beberapa hari saya mengirim foto baru ke NAS agar selalu punya salinan lokal, dan salinan ini juga dicadangkan ke Backblaze B2 setiap malam
Berkat konversi format, saya bisa menyimpan foto sebagai pasangan HEIC+JPG, sehingga punya versi asli sekaligus versi yang lebih mudah digunakan
Yang benar-benar saya inginkan adalah alat yang melakukan hal yang sama untuk iCloud Drive. Saya menyimpan berbagai materi di sana, dan karena tidak ada cara yang masuk akal untuk mencadangkannya, ini cukup mengganggu. Metode yang disarankan Apple(https://support.apple.com/en-us/HT204055) masih jauh dari memuaskan
Yang paling saya benci adalah tingkatan paket aneh yang meloncat dari 200GB ke 2TB. Tidak ada cara membayar bertahap untuk 500GB atau 1TB, yang akan pas untuk banyak keluarga
Di era ketika penyimpanan sudah menjadi komoditas umum, seharusnya biaya dikenakan per GB yang digunakan
Yang paling banyak memakan ruang iCloud saya adalah versi video “live” dari foto. Ukuran filenya lebih besar daripada foto yang hanya disertai potongan gerakan yang sangat singkat
Satu-satunya cara penanganan yang saya temukan sejauh ini adalah mengunduh file secara lokal, menghapusnya dari iCloud, lalu menghapus video lokal dan mengunggah ulang hanya gambar diam yang tersisa
Prosesnya lama dan kasar, dan selama proses itu saya khawatir akan menghapus sesuatu atau kehilangan hal penting
Saya penasaran apakah ada alat yang mengotomatiskan proses ini sambil memberi sedikit kontrol penyuntingan untuk mengidentifikasi dan mempertahankan segelintir gambar “live” yang memang ingin disimpan
Apakah saya membacanya dengan benar?
Jika ini fenomena yang luas, bukankah bisa dianggap Apple menggelembungkan angka untuk mendorong upgrade, dan mungkin berujung pada gugatan?
Saya bukan ahli hukum
Saat foto atau video ditambahkan, aplikasi Photos menganalisisnya dan menyimpan berbagai metadata yang diperlukan agar aplikasi bekerja, termasuk riwayat penyuntingan. Pada akhirnya ini disinkronkan ke iCloud
Apple mungkin masih menggunakan format sistem file lama di iCloud. iCloud sudah cukup lama ada, dan mungkin mereka tidak terlalu memperhatikan perubahan format penyimpanan. Ada juga kemungkinan gambar/video dari akun lama berada di drive yang “lama”