asciinema CLI 3.0, Ditulis Ulang dengan Rust dan Hadirkan Live Streaming serta Upgrade Format File
(blog.asciinema.org)- Alat perekam terminal asciinema CLI 3.0 telah ditulis ulang sepenuhnya dengan Rust, menambahkan fitur upgrade format file dan live streaming terminal
- Dengan adopsi Rust, kini tersedia binary statis, waktu mulai yang cepat, serta integrasi AVT yang mempermudah konkurensi dan penanganan system call, sekaligus menyiapkan fondasi untuk implementasi fitur baru
- Format baru asciicast v3 memperkenalkan timing berbasis interval (delta) untuk event, metadata
termyang lebih terstruktur, event keluar"x", dan komentar baris#untuk meningkatkan kemudahan pengeditan dan daya ekspresi - Live streaming terminal tersedia dalam dua mode: server bawaan lokal dan relay jarak jauh (self-hosted/server resmi), dengan buffering adaptif sesuai kondisi jaringan untuk pengalaman menonton yang mulus
- Filosofi dasar kini ditegaskan kembali sebagai Local-first:
recmewajibkan nama file dan upload dipisahkan (upload <file>), serta prompt pemilihan server sendiri memperkuat kemudahan self-hosting dan pencegahan kebocoran data yang tidak disengaja
Rilis 3.0: asciinema CLI yang ditulis ulang dengan Rust dan peningkatan utamanya
- asciinema CLI 3.0 resmi dirilis
- Pada versi ini, seluruh kode ditulis ulang dengan Rust sekaligus format file rekaman di-upgrade
- Beragam fitur seperti live streaming sesi terminal juga ditambahkan atau ditingkatkan
Penulisan ulang ke Rust dan peningkatan menyeluruh
- CLI ditulis ulang sepenuhnya dengan Rust untuk meningkatkan pengalaman developer dan maintainability, sekaligus menyederhanakan jalur instalasi melalui distribusi binary statis, mempercepat waktu mulai, dan membuka ruang ekspansi fitur
- Pilihan ini didasarkan pada pengalaman penulis bahwa system call dan penanganan konkurensi lebih mudah dilakukan dibanding Python, dan dengan mengintegrasikan asciinema virtual terminal (AVT) ke dalam CLI, implementasi fitur baru menjadi memungkinkan
- Hasilnya, dari sisi performa, distribusi, dan arsitektur, telah disiapkan fondasi untuk penambahan fitur di masa depan
Format file asciicast v3
- Format file asciicast v3 menjadi evolusi yang memperbaiki berbagai kekurangan yang muncul pada v2
- Timestamp absolut di v2 diganti dengan timing berbasis interval (delta), sehingga masalah penyesuaian massal timestamp berikutnya saat event disisipkan atau dihapus dapat diatasi
- Header disusun ulang dengan mengelompokkan metadata terkait terminal di bawah key
term, serta mendukung event"x"(exit) untuk menyimpan status akhir sesi - Komentar baris (
#) di dalam file kini diizinkan untuk meningkatkan keterbacaan dan kemudahan pengelolaan - Cuplikan contoh disediakan untuk menunjukkan struktur dan komposisi event stream secara intuitif
- Format baru ini sudah didukung oleh asciinema server dan asciinema player
Live streaming terminal
- Mode lokal: menyediakan stream yang bisa ditonton di jaringan yang sama melalui server HTTP bawaan, sebagai mode privacy-first di mana data hanya dikirim ke browser penonton
- CLI dibundel dengan asciinema player terbaru sehingga bisa langsung diputar, meski mungkin perlu membuka port firewall
- Mode jarak jauh: menggunakan asciinema server (resmi atau self-hosted) sebagai relay untuk mendistribusikan stream melalui URL yang bisa dibagikan
- Kedua mode dapat digunakan secara bersamaan sehingga konfigurasi distribusi bisa disesuaikan dengan kebutuhan
- Player menyeimbangkan latensi rendah dan pencegahan buffer underrun melalui buffering adaptif berbasis pengukuran latensi jaringan secara real-time
- Server mendukung perekaman stream otomatis, namun server operasional asciinema.org saat ini menonaktifkan perekaman dan menerapkan kebijakan batas 1 stream simultan
- Untuk self-hosting, perekaman aktif secara default dan tidak ada batas stream simultan
Kembali ke Local-first
- Di masa lalu,
asciinema recmemasukkan perilaku upload ke dalam alur default, yang menimbulkan risiko publikasi tanpa sadar dan kebocoran informasi- Pada 2.4, prompt pilihan sebelum upload diperkenalkan sebagai persiapan transisi; di 3.0, hal ini dipisahkan lebih tegas dengan nama file wajib, penghapusan fungsi upload dari
rec, dan perintah eksplisitupload <file>
- Pada 2.4, prompt pilihan sebelum upload diperkenalkan sebagai persiapan transisi; di 3.0, hal ini dipisahkan lebih tegas dengan nama file wajib, penghapusan fungsi upload dari
- Filosofi dasar kini dipertegas sebagai local-first, dengan alur yang didesain ulang agar pengguna memutuskan publikasi/berbagi secara sadar
- Penggunaan lokal sepenuhnya didukung penuh, dan publikasi hanya dilakukan secara eksplisit saat diperlukan
Penguatan kemudahan self-hosting
- Saat pertama kali menggunakan
upload,stream, atauauth, akan muncul prompt pemilihan URL server, yang menawarkan asciinema.org sebagai default namun menyimpan pilihan instance sesuai maksud pengguna- Sebelumnya ini juga bisa ditentukan lewat file konfigurasi atau environment variable, tetapi kini penetapan menjadi lebih mudah di lingkungan interaktif seperti VM baru atau Dev container
- Ini tidak hanya meningkatkan kemudahan penggunaan self-hosting, tetapi juga berfungsi sebagai lapisan keamanan tambahan untuk mencegah upload eksternal yang tidak diinginkan
Distribusi dan panduan penggunaan
- Diperlukan waktu hingga paket tersedia di repository paket tiap distribusi
- Sementara itu, binary pra-build untuk GNU/Linux dan macOS dapat diunduh dari rilis GitHub, atau pengguna dapat membangun dari source
- Release note dan riwayat perubahan detail dapat dilihat di dokumen release notes dan CHANGELOG di GitHub
2 komentar
Saya sempat berpikir bukankah 3.0 sudah pernah rilis? Jadi saya cari-cari, ternyata itu adalah tulisan dari tahun 2021 yang mengumumkan bahwa saat Player ditulis ulang dengan Rust, ukurannya akan menjadi 4 kali lebih kecil dan 50 kali lebih cepat.
Asciinema - Rekam dan bagikan layar terminal
Asciinema 3.0 - 4 kali lebih kecil, 50 kali lebih cepat
Komentar Hacker News
Asciinema benar-benar alat yang keren, saya memakainya saat merekam semua demo TerminalTextEffects, dan Asciinema GIF Generator (AGG) mengubah file asciicast menjadi GIF terminal berkualitas tinggi, jadi demo bisa dengan mudah dipasang di repositori atau dokumentasi TerminalTextEffects
Output file raw atau metode seperti termsvg kurang cocok untuk TTE karena menghasilkan data yang sangat besar ke stdout
Lihat tautan dokumentasi AGG dan repositori TerminalTextEffects
Saya sedang menikmati menghias motd server atau pesan startup dengan TTE acak setiap kali dilewati
Contoh buatan saya bisa dilihat di sini
Efek prompt ini benar-benar indah, ada gunanya atau tidak saya harap terus dibuat, saya bisa terpaku menontonnya
TTE terasa seperti efek fantastis dari window manager Compiz yang dulu pertama kali membuat saya memakai Linux, tapi diwujudkan di terminal
Saya penasaran bagaimana cara menerapkan TTE ke tmux atau vim sesekali seperti screensaver, apakah perlu dihubungkan lewat pipe, lebih baik pakai alias, dan semacamnya
Saya ingin tahu biasanya dipakai bagaimana, dibuat awalnya untuk kegunaan apa, dan sekarang dimanfaatkan seperti apa
Semoga terus dikembangkan
t-rec juga alat yang sangat berguna, bisa merekam window yang diinginkan lalu menjadikannya video atau gif
Tidak sepenuhnya sama, tapi kalau hanya ingin cepat membagikan gif terminal, kadang t-rec lebih mudah
File GIF 15MB benar-benar tidak masuk akal
Tidak bisa dinavigasi, teks tidak bisa dipilih, dan membuang bandwidth 15 kali lipat
Sangat disayangkan memindahkan teks yang bisa dikompresi dengan baik, mudah dinavigasi, dan aksesibel ke video dalam format terburuk
Setidaknya akan bagus jika ikut disertakan file raw asciinema atau tautan ke web viewer, sehingga bisa dimuat cepat dan mendukung jeda/navigasi/salin-tempel
GIF yang hanya berputar cepat hampir tidak menyampaikan maksud apa pun selain kepada pembuatnya sendiri
Situs asciinema.org sekarang sedang kebanjiran trafik karena terlalu populer, CPU server yang terhubung ke stream btop mencapai 95%
Contoh stream tersebut bisa dilihat di sini
Meski begitu, server Elixir/Phoenix yang berjalan di atas BEAM tetap melayani dengan baik di tengah banyak request dan penggunaan CPU tinggi — inilah kekuatan BEAM
Saat ini masih bertahan hanya dengan 2 VM ber-RAM 2GB, tapi rasanya sebentar lagi perlu scale up
Di era ketika semua infrastruktur condong ke cloud, mengejutkan melihat layanan seterkenal ini berjalan stabil hanya di dua VM 2GB
Itu bahkan lebih sedikit daripada RAM laptop kelas menengah zaman sekarang, tapi tetap lancar
Setelah infrastrukturnya langsung diperbesar, sekarang kembali stabil dan responsif
Stream btop saat ini patah-patah parah dan penggunaan CPU terus melonjak liar antara 0% sampai 100%
Saya jadi penasaran apakah layanannya sedang terus crash lalu restart
Hidup BEAM selamanya!
Sedikit tips, sebaiknya kurangi interval refresh btop, kalau dijalankan di 100ms btop akan memakan CPU cukup besar
Klien Asciinema terus berganti dari Python → Golang → Python → Rust
Bisa juga melihat dokumen sejarahnya dan blog terkait
Untuk proyek seperti ini rasanya tidak terlalu penting diimplementasikan dengan bahasa apa, karena semua bahasa akan memberi performa yang mirip
Karena codebase-nya kecil, dipindahkan ke bahasa mana pun dampak fungsionalnya minim, jadi menurut saya tidak masalah terus ditulis ulang ke bahasa yang paling memotivasi pengembang
Menarik juga
Menurut saya sebagian besar masalah Go seharusnya bisa diketahui lebih dulu bahkan sebelum mulai menulis kode, hanya dengan riset sederhana pun isu packaging seperti itu sudah merupakan keluhan yang valid pada 2016, tapi kemudian terselesaikan setelah Go modules
Setelah itu, penulisan ulang beruntun ke ClojureScript, Elixir, dan Rust sulit dilepaskan dari kesan mengejar tren teknologi
Pergantian bahasa sesering ini menurunkan kepercayaan terhadap rekayasa teknisnya
Saya punya afeksi terhadap Asciinema, dan mendukung proyek ini lewat kontribusi kecil serta donasi
Saya juga merekomendasikan melihat panduan donasi dan bagaimana Asciinema akan terlihat saat menyelesaikan masalah sistem Linux (replay SadServers)
Asciinema jelas merupakan alat/produk terbaik yang pernah saya pakai
Alur autentikasi/upload lewat CLI rapi dan intuitif, jadi walaupun perlu beberapa langkah sama sekali tidak terasa merepotkan
CLI lain juga ada yang desainnya mirip, tapi Asciinema terasa sama sekali tidak mengganggu
Selamat atas pencapaian yang sangat keren ini
Tapi saya berharap asciinema juga punya fitur bawaan untuk langsung menyimpan sebagai SVG atau GIF
Dengan begitu bisa langsung disisipkan ke file Markdown tanpa aplikasi konversi terpisah, dan usability-nya akan jadi lebih baik
Sebagai penggemar berat Asciinema, menurut saya pekerjaan kali ini sangat keren
Untuk fitur live streaming, saya pernah merakit sesuatu yang mirip di atas stream milik s2.dev, tempat saya menjadi salah satu co-founder, dan dengan struktur seperti ini sepertinya bisa dilakukan tanpa relay perantara
Secara pribadi saya suka melihat btop ditampilkan secara real-time
Untuk referensi struktur live streaming, dokumen ini akan membantu
Sekarang setelah ada fitur streaming terminal real-time, akan lucu kalau ada yang menambahkan avatar vtuber ASCII art sebagai overlay di atas terminal
Asciinema, proyek elixir favorit saya, sekarang bahkan ditulis ulang juga dalam Rust
Saya sangat menyukai perkembangan ini
Saya penasaran apakah mereka juga menambahkan fitur untuk otomatis menyensor/memantau informasi sensitif seperti secret atau key dari perintah, sekarang kan ada banyak LLM ringan jadi mestinya lebih mudah daripada dulu
CLI-nya memang ditulis ulang dalam Rust, tapi servernya masih Elixir/Phoenix, dan bagian itu cocok sekali untuk fitur seperti pemfilteran informasi sensitif
Bukankah dulu awalnya memang dibuat dengan Python?
Saya agak bertanya-tanya apakah pertanyaan soal pemfilteran otomatis secret/key dari perintah itu serius atau bercanda
Alasan streamer Twitch biasanya memakai dua komputer adalah karena satu dipakai untuk menampilkan layar siaran, dan satu lagi untuk menjalankan OBS serta capture HDMI
Kalau memanfaatkan fitur live streaming baru Asciinema, developer yang bekerja hanya di konsol/terminal sepertinya bisa langsung men-stream layar terminal dari mesin dev ke mesin OBS tanpa capture HDMI
Bagi segelintir kecil streamer pemrograman, Asciinema 3 bisa jadi alternatif yang sungguh nyata
Dengan streaming Asciinema, hampir tidak ada dampak performa, jadi konfigurasi dual device seperti ini tidak diperlukan
Setup 2PC dulu muncul karena beban CPU dari encoding x264, tetapi sekarang kalau encoding dilakukan dengan GPU (Nvidia NVENC), bebannya hampir tidak terasa
OBS x264 praktis tidak dibutuhkan lagi kecuali untuk rekaman offline seperti video YouTube
Alasan streamer Twitch memakai 2PC adalah untuk mencegah benturan resource saat menyiarkan game yang banyak memakai GPU
Selain itu, ini juga mencegah crash driver saat bermain game memengaruhi stream
Setup perlengkapan siaran seperti ini pada dasarnya untuk membagi beban encoding video, jadi untuk streamer pemrograman yang hanya bekerja di konsol rasanya memang tidak perlu