Local first

Image Toolkit dimulai dari satu batasan sederhana: alat gambar seharusnya tidak perlu mengunggah gambar ke server hanya untuk resize, convert, atau membuat ukuran file lebih kecil. Keputusan ini membentuk lebih dari sekadar interface—cara kerja setiap tool ikut ditentukan olehnya.

File asli di-decode dan diproses di browser dengan browser API dan canvas di memori. Resize dan Convert cocok dengan model ini: browser menggambar sumber pada dimensi yang diminta, meng-encode hasilnya, lalu membuat download lokal.

Ini berguna untuk gambar yang pribadi, belum siap dibagikan, atau memang merepotkan untuk diunggah. Tidak ada akun, antrean upload, atau pipeline pemrosesan gambar di server dalam prosesnya.

Compression harus benar-benar mengecilkan file

“Compress” mudah dijanjikan berlebihan.

Untuk JPEG dan format lossy lain, menurunkan quality sering bisa mengurangi ukuran file. PNG berbeda. Meng-encode ulang PNG lewat canvas bisa menghasilkan file lebih kecil, tetapi tidak ada jaminan. Bergantung pada gambar sumber dan encoder browser, hasilnya bisa sama besar atau bahkan lebih besar.

Menyebut setiap PNG yang di-encode ulang sebagai “compressed” akan menutupi fakta itu. Image Toolkit memakai aturan sederhana: kalau hasilnya tidak lebih kecil, jangan sebut compressed.

Dalam kondisi itu, file asli tetap tersedia dan tool memberi tahu bahwa tidak ada hasil yang lebih kecil. Yang dibutuhkan pengguna adalah file yang lebih kecil, bukan sekadar file yang di-encode ulang.

Prinsip yang sama memisahkan convert format. Mengubah PNG menjadi WebP bisa membuat file lebih kecil, tetapi itu adalah perubahan format dengan trade-off sendiri. Keputusan tersebut ada di Convert, secara jelas, bukan disajikan sebagai compression PNG.

Hapus background, tetap lokal

Hapus Background membutuhkan lebih dari sekadar canvas encoding. Di V1, Image Toolkit memuat U2NetP dan runtime WASM ONNX Runtime Web secara lazy hanya saat hapus background digunakan. Inference kemudian berjalan di perangkat pengguna, tanpa mengunggah gambar sumber untuk diproses.

Model menghasilkan mask yang diterapkan browser ke piksel asli untuk membuat PNG transparan. Warna background kemudian dikomposit dari cutout lokal tersebut, jadi mengganti background tidak membutuhkan inference lagi.

Ada trade-off. Model dan runtime perlu dimuat, perangkat pengguna yang mengerjakan prosesnya, dan V1 tidak berpura-pura setiap hasil akan sempurna. Detail kecil dan tepian yang sulit masih bisa menghasilkan hasil yang kurang rapi.

Local-first bukan hanya keputusan privasi. Ia menentukan di mana proses berjalan, trade-off yang bisa diterima, bahkan apa yang boleh disebut produk sebagai hasil yang berhasil.

Coba Image Toolkit