Skip to main content
Glama
README.md
# Lucky Me Clipper

Tools untuk memotong video horizontal YouTube (16:9) jadi video vertikal (9:16) siap upload ke Shorts, TikTok, atau Reels. Deteksi pergantian scene diproses dengan PySceneDetect, dan posisi wajah pembicara dipantau dengan MediaPipe agar cropping pas di tengah.

Proyek ini menyediakan:
1. **MCP Server (Model Context Protocol)** yang bisa dipanggil oleh Claude Desktop, Cursor, Antigravity, OpenCode, VS Code / Roo Code, dan Windsurf.
2. **Web Control Center** ringan berbasis FastAPI + Tailwind + Alpine.js untuk memantau status render, cek video di theater player, dan mengelola publish ke YouTube via Zernio API.

---

## Cara Pasang MCP

Jalankan perintah ini di folder proyek untuk memasang server MCP ke semua editor AI yang terpasang di komputer Anda (Claude Desktop, Cursor, Antigravity, OpenCode, VS Code / Roo Code, atau Windsurf):

```bash
python doctor.py --install-all
```

Perintah ini akan mencari lokasi konfigurasi masing-masing editor secara otomatis dan mendaftarkan `video-reframer`.

Bila ingin memasang ke editor tertentu saja:
```bash
python doctor.py --install claude_desktop
# Pilihan lain: cursor, antigravity, opencode, windsurf, cline_roo
```

---

## Setup Awal Proyek

### 1. Pasang Dependensi Python
```bash
git clone https://github.com/LuckyAnggara/lucky-me-clipper.git
cd lucky-me-clipper
pip install -r requirements.txt
```

### 2. Atur Environment (.env)
Salin contoh file `.env`:
```bash
cp .env.example .env
```
Lalu masukkan API key Anda ke file `.env`:
```env
GEMINI_API_KEY=AIzaSyD-xxxxxx

# Opsional jika ingin auto publish ke YouTube Shorts
ZERNIO_API_KEY=
ZERNIO_YOUTUBE_ACCOUNT_ID=
```

### 3. Cek Status Sistem & Unduh FFmpeg
Jalankan diagnosa sistem:
```bash
python doctor.py --check
```
Jika FFmpeg belum terpasang di komputer Anda, jalankan Web UI untuk mengunduh FFmpeg portable sekali klik:
```bash
python ui.py
```
Buka browser di `http://127.0.0.1:8080`, lalu klik **Unduh FFmpeg Portable**. Binary akan tersimpan di folder lokal `./bin/` tanpa mengubah path sistem komputer Anda.

---

## Fitur Utama

- **Kurasi Otomatis (`curate_youtube_clips`)**: Menganalisis video YouTube langsung via Gemini 3.8 Flash tanpa perlu download file video utuh di awal. Memberi rekomendasi timestamp dan hook.
- **Sistem Memory Interaktif**: Server menyimpan percakapan analisis klip dan project aktif ke database SQLite lokal (`clipper_memory.db`). Jika Anda menanyakan *"tadi klip nomor berapa yang tersisa?"*, AI masih mengingat konteks sebelumnya.
- **Download Presisi (`fetch_and_trim_clip`)**: Hanya mengunduh potongan video yang dipilih menggunakan `yt-dlp`.
- **Deteksi Shot Kamera (`analyze_scene_composition`)**: Memotong klip tepat di pergantian sudut kamera dan menghitung koordinat wajah.
- **Layout Adaptif 9:16 (`render_adaptive_video`)**:
  - 1 Wajah: Fullscreen crop 9:16 mengikuti pembicara.
  - 2 Wajah: Split screen atas-bawah atau 1:1 berdampingan.
  - B-roll / multi-orang: Format 1:1 di tengah dengan background ambient blur.
- **Subtitle Animasi Dinamis (`render_dynamic_css_captions`)**: Pilihan gaya `hormozi`, `mrbeast`, `cyberpunk`, atau `minimal`, dirender via Headless Chrome dan ditempel ke video dengan FFmpeg.
- **Cover Thumbnail 9:16 (`render_short_cover`)**: Menghasilkan thumbnail vertikal dengan hook text 2 baris di area dada agar tidak menutupi wajah.
- **Publish ke YouTube Shorts (`publish_clip_to_social`, `schedule_clip_post`)**: Upload dan jadwalkan posting lewat integrasi Zernio API dengan log audit tersimpan di database.

---

## Contoh Penggunaan via Chat AI

Setelah MCP terhubung ke AI editor Anda, Anda cukup memberikan instruksi seperti ini di ruang obrolan:

> *"Ambil bagian menarik dari link YouTube ini: https://www.youtube.com/watch?v=xxxx. Buatkan klip vertikal 9:16 dengan subtitle gaya hormozi dan buatkan cover pembukanya."*

AI Agent akan:
1. Menemukan momen terbaik dan memberikan daftar segmen.
2. Mengunduh segmen yang Anda pilih.
3. Mendeteksi pergantian shot dan wajah pembicara.
4. Merender klip 9:16 dan menempelkan subtitle animasi.
5. Memberikan tautan ke Web UI (`http://127.0.0.1:8080`) agar Anda bisa menonton hasilnya di theater player.

---

## Menjalankan Pengujian

Untuk memverifikasi semua fungsi server dan web UI:

```bash
python tests/test_server.py
python tests/test_web_server.py
```