Interior Reels 是做什么的?
Ubah klip mentah proyek interior menjadi reel 9:16 siap upload. Script hanya alat. Keputusan editorial (shot mana, bagian mana, urutan apa) adalah tugas Claude dan harus didasarkan pada melihat gambar setiap klip, bukan menebak dari nama file.
SKILL = folder skill ini. Semua script: python3 SKILL/scripts/<nama>.py.
Sebelum mulai (sekali per sesi)
Jalankan bash SKILL/setup.sh. Kalau ada GAGAL, bereskan dulu. Baca SKILL/brand.json untuk nama studio, CTA, logo, pattern default, dan selera klien.
Aturan mutlak (tidak boleh dilanggar)
- Teks dan logo bukan tugas asisten. Teks dan logo diatur klien di GUI dan disimpan di
<folder>/_edit/overlay.json.render.pymembaca file ini dan menimpa seluruhteksdanlogodi plan. Jangan menulisteksataulogodiplan.json, jangan bertanya isi teks ke klien, dan jangan menambah teks sendiri keoverlay.json(termasuk CTA daribrand.json) kecuali klien memintanya. - Pattern hanya mengatur potongan dan tampilan. Yang diambil dari pattern: urutan slot, durasi, gerak, transisi, dan grade.
teks,contoh_isi, danlogodi pattern hanya catatan dari video referensi, tidak dirender. - Ubah teks atau logo lewat chat = edit
overlay.json. Kalau klien minta ganti isi teks, font, posisi, waktu muncul, ukuran, warna, atau logo, edit<folder>/_edit/overlay.json(format diPLAN.mdbagianoverlay.json), lalu render ulang. GUI memuat ulang file ini setelah balasanmu. Font hanya dariSKILL/fonts/. Daftar font, kategori, ciri, dan kegunaannya ada difonts/fonts.json; pilih dari situ sesuai suasana yang diminta klien. Font atau ukuran beda per baris (mis. "baris kedua pakai Great Vibes") diatur lewatteks[].per_baris. Logo hanyahitam(brand/logo.png) atauputih(brand/logo-putih.png). Data studio (nama, websitekeziakarin.com, Instagram@keziakarin.studio) tetap daribrand.json. - Audio juga dari
overlay.json(audio). Jangan memilih atau mengganti musik sendiri, dan jangan menulismusikdi plan. Kalau klien minta lewat chat (ganti lagu, volume, titik mulai, final dengan/tanpa musik, sinkron ketukan), editaudiodioverlay.json(format diPLAN.md). Musik hanya dari audio panduan pattern (patterns/audio/) atau library studio (brand/musik/). Ingatkan klien bahwa audio referensi milik orang lain kalau mereka ingin memakainya di final. - Kalau
overlay.jsonbelum ada, render tetap jalan tanpa teks dan logo dari pattern. Sebutkan ke klien bahwa teks dan logo bisa diisi di GUI bagian Detail. - Jangan menghapus atau mengganti
overlay.jsontanpa diminta. File ini adalah pilihan klien. - Goyang ditangani otomatis.
render.pymengukur goyang tiap segmen dan menstabilkan sendiri ("stabil": "auto", default). Jangan isistabilkecuali ada alasan:truememaksa stabil,falsemematikan (misalnya gerak tangan disengaja). Baca tabel "Stabil" di log render:! sisa goyang terlihat= cek hasilnya;! GAGAL= render berhenti, pilih rentang atau klip lain untuk segmen itu. Saat review, tetap isigoyangdi_review/*.jsonuntuk bagian yang jelas goyang/kehilangan fokus: rentang itu tidak akan dipakai saat render menggesermulai. - Pilih bagian yang layak, jangan pakai semua detik klip. Saat render,
render.pyotomatis menganalisis klip (_kualitas/) dan menandai bagian gelap, kosong (tidak ada objek), atau blur. Segmen yang memuat lebih dari 0.3 detik bagian buruk ditolak dan diberi saranmulai. Wajib: gesermulaike saran, atau kurangidurasi, atau ganti klip. Tidak boleh memakai--abaikan-kualitastanpa izin pengguna. - Durasi mengikuti footage, bukan pattern. Kalau rentang bagus klip lebih pendek dari slot pattern, pendekkan slot itu. Total reel boleh lebih pendek dari
durasi_totalpattern. Jangan mengisi slot dengan bagian buruk. - Lihat frame sebelum final. Saran dari analisis harus dicek dengan melihat frame di rentang itu (grid atau preview). Analisis tidak tahu apakah objek utamanya bagus atau apakah bagian tersebut adalah pembuka yang tepat.
- Review semua klip bahan dulu. Jalankan
scripts/review_bahan.py <folder-bahan>, lihat SETIAP lembar di_review/sampai habis, lalu isi JSON tiap klip (sudah_dilihat,goyang,rentang_layak,keputusan).render.pymenolak render kalau klip belum direview atau segmen di luarrentang_layak(kecuali--abaikan-kualitas). - Cek teks setelah render. Posisi teks dipilih klien (grid 3x3). Setelah render, lihat
*_teks<N>_cek.jpg(kotak merah = perkiraan area teks). Kalau teks menutupi wajah atau objek utama, beri tahu klien dan sarankan posisi lain. Jangan mengubah posisi sendiri tanpa persetujuan. - Klip pilihan klien dari
<folder>/_edit/klip.json. Baca file ini sebelum membuat plan (format diPLAN.mdbagianklip.json).pembuka= klip segmen pertama,penutup= klip segmen terakhir,jangan= tidak boleh dipakai di segmen mana pun. Pilihan klien menang atasjenis_shotpattern; kalau jenis shot klip itu beda dari slot pattern, beri tahu klien. Detik terbaik di dalam klip pilihan tetap dipilih asisten.render.pymenolak plan yang melanggar file ini (tidak bisa dilewati--abaikan-kualitas). Jangan mengubah atau menghapusklip.json; file ini ditulis GUI.
Alur: edit klip menjadi reel
- Kumpulkan info. Yang wajib: folder klip. Yang opsional: pattern dan file suara (narasi/voice over, mp3/m4a/wav). Teks dan logo sudah ada di
_edit/overlay.json, jangan ditanyakan. Tanya hanya yang benar-benar kosong, maksimal 1 pertanyaan. Kalau ada file suara, isisuaradi plan (lihatPLAN.md). Suara tidak direkam oleh skill: pengguna harus menyediakan file audionya. Bandingkan jumlah klip di folder denganmin_klippattern. Kalau kurang, beri tahu klien dan sarankan pattern denganmin_kliplebih kecil atau tambah klip. Tetap boleh lanjut kalau klien setuju. - Scan. Jalankan
scan_clips.py <folder>untuk membuat<folder>/_scan/. - Lihat SETIAP grid
_scan/<klip>.jpgdengan tool view. Untuk tiap klip catat dalam tabel: jenis shot (wide / medium / detail / walk-through / pan), ruangan, kualitas (goyang, gelap, terlalu terang, ada orang atau barang berantakan), detik terbaik (detik_framedimanifest.jsonmemetakan kotak grid ke detik), dan arah gerak kamera. Jangan lanjut sebelum semua grid dilihat. - Pilih pattern dari
SKILL/patterns/*.json, sesuai permintaan atau default. Kalau pemilihan otomatis, pilih yangcocok_untuk-nya paling sesuai dengan jumlah dan isi klip. Bacacatatan_trainingpattern terpilih (kalau ada) dan terapkan pelajarannya saat mengisi slot. - Isi slot. Untuk setiap slot di
alur, pilih klip dan detikmulaiyang cocok denganjenis_shot, ikuti aturan cerita di bawah. Salindurasi,gerak,transisi_masuk,efek_masuk,efek_keluar,redup, dan grade dari pattern. Salin jugabingkaidanakhirke plan, ubahlogo_slotmenjadilogo_segmen(indeks segmen slot itu), dan isipembuka_segmendengan indeks segmen slot teks pertama pattern (teks[0].slot), supaya teks pembuka dari GUI muncul di slot itu. Kalau pattern punyateks[0].durasi, tulis jugapembuka_durasi_teks(nilai number, detik) ke plan — ini memastikan teks pembuka tampil cukup lama agar terbaca. Kalau pattern punyateks[0].sampai_slot, tulis jugapembuka_tekske plan:mulai,animasi,fade,keluardisalin dariteks[0], dansampai_segmen= indeks segmen slotsampai_slot. Jangan salin teks dan logo. Tulis<folder>/_edit/plan.jsonsesuaiSKILL/PLAN.md, memakai path absolut.- Pattern dengan
bingkailetterbox: utamakan klip landscape. Klip portrait dipotong di tengah menjadi pita 16:9; kalau terpaksa dipakai, beri tahu klien. - Pakai ulang klip boleh bila klip kurang dari jumlah slot: rentang
mulaidalam klip yang sama berjarak minimal 1 detik, dan tidak di dua segmen berurutan. Render memberi peringatan kalau aturan ini dilanggar. - Kalau pattern punya
belum_didukung, sebutkan efek itu ke klien sebelum render. - Mode edit dari GUI (disebut di pesan "Mulai edit"):
ikuti referensi(default): salin alur pattern persis, jangan buang, tukar, atau gabung slot. Teks overlay sudah diberi nomor shot sesuai slot pattern (kapan), dan logo memakailogo_segmen, jadi urutan segmen harus sama denganalur. Kalau klip kurang, pakai ulang klip (aturan di atas), jangan buang slot.custom: pattern hanya titik awal gaya (grade, transisi, efek, bingkai). Durasi dan jumlah segmen boleh disesuaikan dengan klip. Tulis"mode": "custom"di plan, supaya audio referensi disinkronkan ke ketukan.
- Pattern dengan
- Preview. Jalankan
render.py <plan> --preview, lalu lihat*_preview_cek.jpg. Periksa: urutan masuk akal, tidak ada shot buruk, teks dari overlay terbaca dan tidak menutupi objek utama, tidak ada frame beku yang aneh. Perbaiki plan lalu ulangi kalau perlu. - Final. Jalankan
render.py <plan>, lihat*_cek.jpgsekali lagi, lalu laporkan path video beserta ringkasan urutan shot dalam 1-2 kalimat.
Aturan cerita interior
- 3 detik pertama menentukan orang berhenti scroll. Pembuka harus shot terkuat: terang, lurus, ruang terlihat utuh.
- Ikuti denah. Urutan ruang dari pintu masuk ke area publik (ruang tamu, makan, dapur) lalu ke area privat (kamar, kamar mandi). Jangan melompat bolak-balik antar ruangan.
- Selang-seling skala. Wide, lalu detail, lalu wide. Dua wide dari ruangan berbeda berturut-turut sebaiknya disambung transisi, bukan cut.
- Arah gerak menyambung. Pan ke kiri disambung shot yang bergerak ke kiri atau transisi
slideleft/smoothleft. Hindari arah gerak berlawanan di satu sambungan. - Ambil bagian stabil. Pilih detik di tengah gerakan, bukan saat kamera mulai atau berhenti. Lewati bagian goyang, blur, atau ada orang.
- Penutup pakai shot paling cantik yang punya area polos untuk CTA dan logo.
- Teks: diatur klien lewat
overlay.json. Kalau diminta saran, sarankan maksimal 6 kata per teks. - Klip kurang dari slot: buang slot
detaildulu. Klip berlebih: pakai yang terbaik saja, tidak perlu semua klip dipakai. - Klip landscape: pakai
"isi": "blur"kalau komposisinya penting. Kalau objek utama ada di tengah,cropsudah cukup.
Alur: revisi setelah hasil
Berlaku bila pesan klien diakhiri [mode revisi: ...] (GUI menambahkannya saat _edit/plan.json sudah ada). Tujuannya: pahami maksud revisi sebelum mengubah apa pun, karena render ulang lama. Klien hanya mengklik tombol, jadi semua pertanyaan WAJIB dikirim lewat blok pertanyaan, bukan teks bebas.
- Pesan revisi baru (bukan jawaban, bukan "Kerjakan"):
- Baca
plan.jsondan lihat*_cek.jpghasil terakhir. Jangan ubah file apa pun. - Kirim satu ronde: maksimal 4 pertanyaan. Isinya pertanyaan maksud (shot mana, seberapa banyak, gaya apa) dan maksimal 2 temuan dari hasil (mis. shot gelap, teks menutupi objek), masing-masing dengan opsi seperti "Perbaiki" / "Biarkan".
- Tiap pertanyaan 2-4 opsi pendek (≤ 6 kata), tepat satu opsi
"disarankan": true."multi": truehanya untuk pilihan yang boleh lebih dari satu (mis. shot mana saja yang diganti). Jangan tambah opsi "Lainnya"; GUI sudah menyediakan. - Tulis maksimal 1 kalimat pengantar, lalu blok, lalu berhenti dan tunggu.
- Baca
- Pesan berawal
Jawaban:= jawaban ronde. Kalau masih ada yang belum jelas dan ini baru ronde pertama, kirim ronde kedua (aturan sama). Setelah itu (atau kalau sudah jelas), kirim blokringkasan: daftar perubahan yang akan dibuat, 1 poin per perubahan. Berhenti dan tunggu. Langsung kerjakan: ...= pakai opsidisarankanuntuk semua pertanyaan terakhir, lalu kerjakan tanpa ringkasan.Kerjakan sesuai ringkasan.= kerjakan persis isi ringkasan terakhir (edit plan/overlay, preview, final), lalu laporkan seperti biasa.- Pesan teks bebas saat kartu terbuka = jawaban bebas. Perlakukan seperti
Jawaban:. - Maksimal 2 ronde pertanyaan per revisi. Permintaan yang sudah sangat jelas (mis. "ganti font jadi Great Vibes") tetap lewat 1 ronde singkat (cukup temuan, atau 1 pertanyaan konfirmasi), lalu ringkasan.
- Pesan "klip pilihan berubah" (dikirim GUI setelah klien mengubah klip pembuka, penutup, atau jangan dipakai) = revisi biasa: baca
_edit/klip.jsonterbaru dan terapkan ke plan lewat langkah 1-4 di atas (aturan mutlak 13).
Format blok (JSON valid, satu blok per balasan):
```pertanyaan
{"jenis": "tanya", "pertanyaan": [
{"id": "q1", "judul": "Shot mana yang mau diganti?", "multi": true,
"opsi": [{"label": "Shot 2 (dapur)", "disarankan": true}, {"label": "Shot 4 (kamar)"}]},
{"id": "q2", "judul": "Temuan: shot 3 agak gelap", "multi": false,
"opsi": [{"label": "Perbaiki", "disarankan": true}, {"label": "Biarkan"}]}
]}
```
```pertanyaan
{"jenis": "ringkasan", "ringkasan": ["Shot 2 diganti klip dapur detik 4", "Shot 3 dicerahkan"]}
```
Alur: training gaya
Berlaku bila pesan diakhiri [mode training: ...] (dikirim dari tab Training gaya di GUI). Tujuannya: uji ulang pattern yang sudah ada terhadap video contohnya, laporkan yang tidak cocok, dan perbaiki pattern atas persetujuan klien. Semua pertanyaan WAJIB lewat blok pertanyaan (format di "Alur: revisi setelah hasil").
- Input dari pesan GUI: nama pattern, mode (
ikuti referensi/custom), dan folder klip. - Bahan. Baca
SKILL/patterns/<pattern>.jsontermasukcatatan_training. Video contoh =skill/contoh-video/<video_contoh>(foldercontoh-videodi sebelah folder skill). Lembar referensi: pakaiSKILL/_ref/<nama>/yang sudah ada (cari nama pattern atau nama filevideo_contohtanpa ekstensi; lihatfilmstrip.jpg/shots.jpg). Kalau tidak ada, jalankananalyze_ref.py <video contoh> --name <pattern> --out <folder>/_training/<pattern>/ref. - Folder kerja =
<folder>/_training/<pattern>/. Jangan menyentuh<folder>/_edit/. - Review klip bahan (aturan mutlak 11), tapi hanya klip di folder kerja.
- Buat plan di folder kerja dengan pattern yang sama (
modesesuai input GUI). Preview dan final tanpa teks dan logo. - Bandingkan hasil dengan video contoh (frame by frame di
_ref/): apakah urutan shot mirip? Transisi? Grade? Catat perbedaan. - Kirim perbandingan lewat 1 ronde pertanyaan (maks 4 pertanyaan + 2 temuan). Contoh: "Apakah urutan shot sesuai contoh?" dengan opsi "Sudah sesuai" / "Tukar shot 2 dan 3".
- Setelah disetujui (jawaban atau "Kerjakan sesuai ringkasan."), perbarui pattern JSON: ubah
alur,catatan_training,durasi_total, dll. Jangan ubahvideo_contohatauref. - Di akhir, tulis ringkasan perubahan (1-2 kalimat) dan path pattern JSON yang diperbarui.