# bratvid Generator video/GIF bergaya "brat": teks muncul kata per kata dengan animasi pop, lalu efek kilau. Output 1000x1000 @ 60 FPS (MP4 atau GIF). ## Kebutuhan - Node.js 18+ - `ffmpeg` terpasang dan ada di PATH - Koneksi internet saat pertama kali jalan (unduh font dan gambar emoji, lalu di-cache lokal) ## Instalasi ```bash npm i @napi-rs/canvas ``` ## Pemakaian ### 1. CLI Format umum: ```bash node bratvid.mjs [teks] [flag] ``` Semua flag opsional. Yang tidak diisi memakai nilai `DEFAULTS`. **Input teks saja** ```bash # teks sebagai argumen (tanda kutip disarankan) node bratvid.mjs "halo dunia" # tanpa kutip juga bisa, kata-katanya digabung otomatis node bratvid.mjs halo dunia # lewat flag node bratvid.mjs --text "halo dunia" node bratvid.mjs -t "halo dunia" # teks diawali tanda minus: wajib pakai bentuk "=" node bratvid.mjs --text="-halo" ``` **Ganti tema, blur, format** ```bash node bratvid.mjs "halo" -c black # tema hitam node bratvid.mjs "halo" -c green -b 2 # hijau + blur 2 node bratvid.mjs "halo" -f gif # output GIF node bratvid.mjs "halo" -d 3 # frame akhir ditahan 3 detik ``` **Tentukan file output** ```bash node bratvid.mjs "halo" -o hasil.mp4 node bratvid.mjs "halo" -f gif -o ~/storage/downloads/halo.gif ``` **Render hemat RAM (cocok di Termux / HP)** ```bash node bratvid.mjs "teks panjang banget di sini" --seq ``` **Kombinasi lengkap** ```bash node bratvid.mjs "big money never comes clean 💸" -c black -b 1 -f gif -d 2 -o hasil.gif --seq ``` **Ganti sumber emoji sekali jalan** ```bash EMOJI_URL='https://cdn.jsdelivr.net/npm/emoji-datasource-apple@15.1.2/img/apple/64/{code}.png' \ node bratvid.mjs "tes 😭" ``` **Tanpa argumen**: memakai teks dan pengaturan dari `DEFAULTS`. ```bash node bratvid.mjs ``` Catatan: - Kalau `--text` dan teks positional dipakai bersamaan, `--text` yang menang. - Flag yang tidak dikenal akan menghentikan program dengan pesan error. - Nilai yang tidak valid: `--blur` di luar 0-3 dianggap 0, `--theme` tidak dikenal dianggap `white`, `--format` selain `gif` dianggap `mp4`. | Flag | Alias | Keterangan | Default | |------|-------|------------|---------| | `--text` | `-t` | Teks (bisa juga ditulis langsung sebagai argumen) | dari `DEFAULTS` | | `--theme` | `-c` | `black`, `white`, `green` | `white` | | `--blur` | `-b` | `0` sampai `3` | `0` | | `--format` | `-f` | `mp4` atau `gif` | `mp4` | | `--hold` | `-d` | Durasi frame akhir (detik) | `1.5` | | `--out` | `-o` | Path file output | `brat-.` | | `--seq` | - | Render satu frame per waktu (paling hemat RAM) | 6 frame sekaligus | ### 2. Module ```js import { makeBrat } from './bratvid.mjs' const file = await makeBrat({ text: 'halo dunia', theme: 'green', blur: 0, format: 'mp4', hold: 1.5, fast: true, out: './hasil.mp4' }) console.log(file) // path absolut hasil ``` Semua opsi bersifat opsional. Yang tidak diisi memakai nilai `DEFAULTS`. ### 3. Hardcode Edit objek `DEFAULTS` di bagian atas `bratvid.mjs`, lalu jalankan `node bratvid.mjs`. Prioritas: opsi CLI / module > `DEFAULTS`. ## Emoji Gambar emoji diambil per-emoji dari `emoji-datasource-apple@16.0.0` (jsDelivr) dan disimpan di folder `emoji-cache/`. Emoji yang tidak ditemukan akan digambar sebagai teks biasa. Ganti sumber lewat environment variable (`{code}` = codepoint hex, dipisah `-`): ```bash EMOJI_URL='https://contoh.com/emoji/{code}.png' node bratvid.mjs "tes" ``` Catatan: - Default memakai `16.0.0`. Kalau emoji tertentu tidak muncul, cek apakah gambarnya ada di paket tersebut, atau coba versi lain lewat `EMOJI_URL`. - Gambar Apple hanya 64px, jadi bisa terlihat kurang tajam pada font besar. - Emoji Apple adalah hak cipta Apple. Gunakan dengan risiko sendiri. ## Troubleshooting - `spawn ffmpeg ENOENT`: ffmpeg belum terpasang atau tidak ada di PATH. - Emoji tampil sebagai teks: gambar tidak ada di sumber, atau tidak ada koneksi saat pertama kali jalan. - RAM penuh pada teks panjang: pakai `--seq` (atau `fast: false`). Frame langsung dikirim ke ffmpeg tanpa file sementara. ## Kredit Logika animasi dan alur render mengikuti skrip asli `bratvid.js` yang menjadi acuan. Kode ini ditulis ulang ke ESM dengan struktur dan penamaan baru. Cantumkan kredit ke pembuat aslinya jika kamu mempublikasikan ini.