Yang saya kerjakan waktu itu aset hero sinematik untuk sebuah struktur luar ruang, dan bidikan yang paling penting diambil dari sisi bawahnya saat matahari terbenam. Warna hangat keemasan itu bukan pilihan gaya yang bisa saya tukar begitu saja, di situ justru seluruh nilai asetnya.
Sebelum sampai ke urusan filter, ada satu salah paham yang menghabiskan waktu di awal. Generatornya bukan MCP, jadi mencarinya di daftar /mcp cuma bikin muter. Dia CLI lokal yang dipanggil dari shell dengan path lengkap binernya, dan begitu itu jelas, sisanya jadi urusan menghafal beberapa perintah saja.
Alatnya CLI, bukan MCP
Dua perintah pertama yang saya jalankan tiap sesi cuma memeriksa keadaan. Satu untuk memastikan sesinya masih login, satu lagi untuk membaca daftar model yang tersedia. Daftar modelnya dipisah per jenis keluaran lewat flag.
C:\tmp\gencli\gencli.exe account status
# akun yang login duduk di paket max
C:\tmp\gencli\gencli.exe model list --video
C:\tmp\gencli\gencli.exe model list --imagePerintah pembuatannya sendiri berbentuk seperti ini, dengan dua gambar sebagai bingkai awal dan akhir.
C:\tmp\gencli\gencli.exe generate create dualkey_v2 `
--prompt "..." `
--start-image awal.png `
--end-image akhir.png `
--wait --wait-timeout 18mFlag medianya menerima UUID atau path berkas lokal, dan path lokal terunggah sendiri tanpa langkah upload terpisah. Flag --wait menahan prosesnya sampai selesai lalu mencetak URL hasilnya.
Ada satu jebakan kecil di bagian mencetak itu. Kalau keluarannya dilewatkan Tee-Object, teksnya ditulis sebagai UTF-16 dan URL-nya sampai ke saya dalam bentuk karakter berspasi. Menyusunnya ulang dengan mata itu pekerjaan yang tidak perlu ada, jadi saya tarik saja pakai regex https://\S+\.mp4. Untuk generasi yang panjang, perintahnya saya jalankan dengan run_in_background: true supaya hasilnya mendarat di berkas keluaran task dan saya tidak menunggui terminal.
Peta model dan harganya
Daftar model yang saya pegang ditandai terverifikasi per Juni 2026, dan yang penting buat pekerjaan ini cuma satu pembagian: model mana yang menerima dua keyframe, dan model mana yang cuma menerima satu gambar.
Yang menerima bingkai awal sekaligus bingkai akhir ada dua. dualkey_v2 berharga 22,5 kredit untuk 5 detik, mendukung --duration 5|8|10|12, dan naik sampai 54 kredit di 12 detik. Ada juga dualkey_lite yang jauh lebih murah di 7,5 kredit, tapi kualitasnya jelek dan saya coret sejak percobaan awal.
Dua titik harga tadi menarik kalau dibagi durasinya. 22,5 dibagi 5 adalah 4,5, dan 54 dibagi 12 juga 4,5. Jadi di rentang yang tercatat itu harganya lurus, 4,5 kredit per detik keluaran, dan tidak ada diskon untuk durasi panjang.
Sisanya cuma menerima satu gambar: single_a, single_b, single_c, dan single_turbo. Untuk sunting gambar ada edit_lite di 1,5 kredit dan edit_pro.
cost menerima bentuk panggilan yang ditolak create
Subperintah generate cost gratis, jadi wajar kalau dia jadi tempat pertama untuk mencoba bentuk panggilan. Masalahnya dia lebih longgar daripada perintah yang sungguhan.
# ini lolos dan mengembalikan estimasi kredit
C:\tmp\gencli\gencli.exe generate cost single_turbo --prompt "..." `
--start-image awal.png --end-image akhir.png
# ini ditolak, modelnya cuma menerima satu gambar
C:\tmp\gencli\gencli.exe generate create single_turbo --prompt "..." `
--start-image awal.png --end-image akhir.pngUntuk single_turbo, endpoint cost menerima kombinasi start plus end dan mengembalikan angka dengan tenang, padahal create yang sungguhan menolak dua gambar. Sejak itu aturannya saya balik: bentuk panggilan divalidasi lewat create sungguhan, dan cost cuma dipakai untuk apa yang memang dia janjikan, yaitu memperkirakan kredit.
Kegagalannya melekat ke durasi, bukan ke konten
Ini bagian yang sebenarnya saya cari waktu mulai menulis catatan ini. Untuk konten berpalet hangat, generasi 5 detik lolos, sementara 8, 10, dan 12 detik gagal secara konsisten di filter moderasi NSFW. Yang bikin polanya jelas, kegagalan itu terjadi pada konten yang sama, bukan pada konten yang berbeda. Prompt yang sama, bingkai awal dan akhir yang sama, cuma angka --duration yang berganti.
Penjelasan yang saya pegang untuk ini tetap dugaan, bukan sesuatu yang bisa saya buktikan dari luar. Dugaannya, pengklasifikasi moderasinya bekerja per bingkai, dan yang memicunya adalah kombinasi cahaya hangat atau keemasan dengan bentuk organik gelap di sisi bawah, karena bentuk seperti itu terbaca sebagai kulit. Bidikan sisi bawah saat matahari terbenam kebetulan persis campuran itu.
Kalau pemeriksaannya memang per bingkai, sisanya jadi soal jumlah lemparan dadu. Makin panjang durasinya, makin banyak bingkai yang harus lolos, dan makin besar peluang salah satu di antaranya kena. Itu cocok dengan yang saya lihat, walaupun cocok belum berarti terbukti.
Dua jalan keluar
Jalan pertama yang jelas adalah mengubah prompt-nya. Meminta palet yang lebih dingin atau cahaya siang memang membersihkan moderasinya, dan generasi panjang jadi bisa lewat. Harganya suasananya berubah, dan untuk aset yang seluruh nilainya ada di cahaya senja, itu bukan pertukaran yang mau saya ambil.
Jalan kedua yang akhirnya saya pakai adalah membiarkan modelnya bekerja di durasi yang aman, lalu memanjangkan hasilnya sendiri. Generate di 5 detik, lalu interpolasi geraknya jadi 10 detik dengan ffmpeg.
ffmpeg -i klip-5s.mp4 \
-vf "minterpolate=fps=48:mi_mode=mci:...,setpts=2.0*PTS" \
klip-10s.mp4Perintahnya bisa dibaca sebagai hitungan. Klip 5 detik disintesis dulu ke 48 bingkai per detik, jadi ada 48 dikali 5 sama dengan 240 bingkai. Lalu setpts=2.0*PTS membentangkan cap waktunya jadi dua kali lipat, sehingga 240 bingkai yang sama sekarang mengisi 10 detik, atau 24 bingkai per detik. Tidak ada bingkai yang hilang, yang berubah cuma kecepatan pemutarannya, dan bingkai sintesis dari mi_mode=mci yang mengisi celah geraknya.
Suasana hangatnya utuh karena tidak ada satu piksel pun yang saya minta ke model dengan palet berbeda. Waktu hasilnya saya periksa, garis-garis berulang di strukturnya tetap bersih, dan itu bagian yang paling saya khawatirkan karena interpolasi gerak biasanya paling gampang meleleh di pola berulang.
Kalau dibaca lewat harga per detik tadi, jalan ini juga yang paling murah. 5 detik adalah titik terpendek yang tercatat di daftar durasi, dan pada laju 4,5 kredit per detik dia unit keluaran termurah yang memang dibiarkan lewat oleh filternya.
Yang saya bawa pulang
- Kalau moderasinya per bingkai, durasi adalah variabel yang paling sering luput dicurigai. Menaikkan durasi bukan cuma menambah panjang, dia menambah jumlah pemeriksaan yang harus dilewati.
- Sebelum menyalahkan prompt, tahan semua variabel lain dan geser durasinya saja. Konten yang sama di 5 detik dan di 8 detik memisahkan pertanyaan konten dari pertanyaan panjang.
- Endpoint estimasi gratis tidak wajib memakai validasi yang sama dengan endpoint yang mengeksekusi. Bentuk panggilan divalidasi lewat perintah yang sungguhan.
- Interpolasi gerak di ffmpeg adalah cara memanjangkan keluaran tanpa menyentuh paletnya, dan itu penting kalau paletnya yang justru jadi masalah.
- Harga per detik yang lurus berarti durasi panjang tidak pernah lebih hemat, jadi tidak ada alasan ekonomi untuk memaksa durasi yang memang gampang gagal.