Skip to content

dapaaa07/Cliper-AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎬 Clipper.AI

Platform Otomasi Pembuatan Video Pendek Cerdas Berbasis AI

Ubah video YouTube panjang menjadi klip pendek siap posting dengan face tracking otomatis & subtitle instan.

Fitur β€’ Arsitektur β€’ Persyaratan β€’ Instalasi β€’ Penggunaan β€’ Tech Stack


πŸ“– Tentang Proyek

Clipper.AI adalah platform web otomasi berbasis AI yang mengubah video YouTube panjang menjadi klip pendek vertikal (9:16) maupun horizontal (16:9) yang siap diposting ke platform seperti YouTube Shorts, Instagram Reels, dan TikTok.

Cukup masukkan link YouTube, tentukan timestamp klip yang diinginkan, dan biarkan AI menangani sisanya β€” mulai dari face tracking & auto-reframe hingga pembuatan subtitle otomatis.

Alur Kerja

Link YouTube β†’ Pilih Timestamp β†’ AI Proses Otomatis β†’ Download Video + Subtitle
  1. Paste link YouTube β€” Sistem otomatis mengambil judul, thumbnail, dan durasi video.
  2. Tentukan timestamp β€” Pilih satu atau lebih segment waktu yang ingin diklip beserta aspect ratio-nya.
  3. AI memproses otomatis β€” Download segment, face tracking & auto-reframe, generate subtitle.
  4. Download hasil β€” Video klip (.mp4) dan file subtitle (.srt) siap diunduh.

πŸ–ΌοΈ Demo / Tampilan Aplikasi

Berikut adalah tampilan antarmuka (UI/UX) modern premium dari Clipper.AI yang menggunakan tema dark mode dan efek glassmorphism:

1. Dashboard (Landing Page)

Halaman utama minimalis untuk memasukkan link video YouTube. Dashboard

2. Panel Pemilihan Klip (Clip Selector)

Panel interaktif untuk menentukan durasi waktu klip (start/end) dan orientasi aspek rasio (Vertikal 9:16 atau Horizontal 16:9). Clip Selector

3. Pemantau Progress Real-Time (Processing Page)

Halaman pemantau progress pemrosesan video yang di-update secara otomatis. Processing Page

4. Hasil & Unduhan (Results Page)

Halaman akhir untuk memutar hasil klip secara instan, menyalin teks transkripsi AI sekali-klik, dan mengunduh video (.mp4) beserta subtitle (.srt / .vtt). Results Page

5. Riwayat Tugas & Debug Console (History Page)

Panel dashboard manajemen riwayat untuk memantau status tugas, menghapus tugas/tugas yang gagal, dan melihat log debug konsol pemrosesan. History Page


✨ Fitur Utama

🎯 Smart Clip Extraction

  • Input link YouTube, sistem otomatis mengambil metadata video (judul, thumbnail, durasi).
  • Tentukan banyak klip sekaligus dari satu video dengan timestamp berbeda.
  • Pilih output Vertikal (9:16) untuk Shorts/Reels/TikTok atau Horizontal (16:9) untuk format standar.

πŸ‘€ Robust AI Face Tracking & Auto-Reframe (Dual-Pass)

  • Detektor Ganda Utama & Fallback: Menggunakan MediaPipe Face Detection sebagai detektor utama yang sangat presisi, dengan fallback otomatis ke OpenCV Haar Cascade jika MediaPipe tidak terinstal, serta fallback akhir ke stable center-crop agar pemrosesan tidak pernah gagal total.
  • Arsitektur Dual-Pass:
    • Pass 1: Menganalisis metadata koordinat wajah di setiap frame tanpa membebani memori (memory-safe).
    • Pass 2: Melakukan cropping, auto-reframe, dan perpaduan audio secara presisi berdasarkan metadata.
  • Target Lock & Hysteresis: Mengunci target wajah utama pada video multi-person (seperti podcast) untuk mencegah efek "loncat target" atau glitching antar pembicara.
  • Lost-Face Hold & Dead-Zone: Mempertahankan posisi kamera terakhir saat wajah tertutup sementara (lost-face hold), dan menghindari getaran kamera kecil yang tidak perlu menggunakan rentang dead-zone dinamis.
  • EMA Smooth Path: Transisi pergerakan kamera super mulus dengan Exponential Moving Average (EMA) agar pergerakan terasa sinematik seperti diarahkan juru kamera profesional.
  • Progressive Logs: Output log real-time yang detail sehingga Laravel queue worker dapat memantau status secara live tanpa dianggap stuck.

πŸ“ Auto-Subtitle Generation & Styling (Viral Highlight Effect)

  • Fast Transcription: Transkripsi audio menggunakan Groq Cloud API (Whisper Large V3) β€” gratis dan super cepat (1–2 detik).
  • Format .srt & .json: Menghasilkan file subtitle standar SRT serta format timestamps word-level JSON untuk penempatan waktu yang sangat akurat.
  • Dynamic Styling (Advanced SubStation Alpha): Memanfaatkan subtitle_styler.py untuk menghasilkan efek subtitle bergaya viral dengan highlight kata aktif (berwarna kuning tebal: &H00FFFF&) disertai animasi popup dinamis saat diucapkan pembicara.
  • Auto Burn-In (FFmpeg Filter): Melakukan proses burn-in langsung ke video output menggunakan filter FFmpeg secara optimal dan efisien tanpa merusak sinkronisasi audio.
  • Multi-language: Mendukung berbagai bahasa secara otomatis (auto-detect language).

πŸ“Š Real-Time Progress Monitoring

  • Pantau status pemrosesan setiap klip secara real-time dengan progress bar.
  • Status update live: downloading β†’ face tracking β†’ transcribing β†’ completed.
  • Debug console bawaan untuk melihat log proses secara detail.

πŸ—‚οΈ Manajemen Tugas

  • Lihat riwayat semua video dan klip yang pernah diproses.
  • Hapus tugas yang gagal atau yang sudah selesai didownload.
  • Status indikator visual: pending, processing, completed, failed.

🎨 UI/UX Premium

  • Desain modern dengan glassmorphism, gradient, dan micro-animations.
  • Dark mode theme yang elegan dan nyaman di mata.
  • Fully responsive β€” berfungsi baik di desktop maupun mobile.

πŸ—οΈ Arsitektur Sistem

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     BROWSER (Frontend)                      β”‚
β”‚          Laravel Blade + Vite + Vanilla CSS                 β”‚
β”‚                                                             β”‚
β”‚  Dashboard β†’ Clip Selector β†’ Processing β†’ Results Page      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚ HTTP / AJAX Polling
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  LARAVEL BACKEND (PHP)                       β”‚
β”‚                                                             β”‚
β”‚  VideoController ──→ ProcessVideoClipJob (Queue)            β”‚
β”‚       β”‚                      β”‚                              β”‚
β”‚  Video Model            Clip Model                          β”‚
β”‚  (videos table)         (clips table)                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚ Symfony Process (subprocess)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               PYTHON AI PIPELINE                            β”‚
β”‚                                                             β”‚
β”‚  clipper_bot.py (Orchestrator)                              β”‚
β”‚       β”‚                                                     β”‚
β”‚       β”œβ”€β”€ yt-dlp            β†’ Download segment YouTube      β”‚
β”‚       β”œβ”€β”€ face_tracker.py   β†’ MediaPipe/OpenCV tracking     β”‚
β”‚       β”œβ”€β”€ transcribe.py     β†’ Groq Whisper β†’ SRT & JSON     β”‚
β”‚       └── subtitle_styler.pyβ†’ Dynamic ASS style & burn-in   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Persyaratan Sistem

Software Wajib

Software Versi Minimum Keterangan
PHP 8.3+ Runtime Laravel
Composer 2.x PHP dependency manager
Node.js 18+ Build frontend assets (Vite)
NPM 9+ Node package manager
Python 3.10+ AI pipeline scripts
FFmpeg 6.0+ Video processing & transcoding
SQLite 3.x Database (default, bisa diganti MySQL/PostgreSQL)

API Key (Gratis)

Layanan Kegunaan Link
Groq API Transkripsi Whisper (speech-to-text) console.groq.com/keys

Catatan: Groq API sepenuhnya gratis dengan limit sangat besar. Cukup daftar akun dan generate API key.


πŸš€ Instalasi

Langkah 1: Clone Repository

git clone https://github.com/dapaaa07/ai-clipper.git
cd ai-clipper

Langkah 2: Install Dependensi PHP (Composer)

composer install

Langkah 3: Konfigurasi Environment

# Salin file environment template
cp .env.example .env

# Generate application key
php artisan key:generate

Edit file .env dan sesuaikan konfigurasi berikut:

# Nama aplikasi
APP_NAME="Clipper.AI"

# Database (default SQLite, tidak perlu diubah)
DB_CONNECTION=sqlite

# Queue driver (wajib database untuk job processing)
QUEUE_CONNECTION=database

# Groq API Key (dapatkan gratis di https://console.groq.com/keys)
GROQ_API_KEY=gsk_YOUR_API_KEY_HERE

Langkah 4: Setup Database

# Buat file database SQLite
touch database/database.sqlite

# Jalankan migrasi untuk membuat tabel
php artisan migrate

Langkah 5: Buat Storage Link

php artisan storage:link

Langkah 6: Setup Python Virtual Environment

# Buat virtual environment Python
python3 -m venv python_venv

# Aktifkan virtual environment
source python_venv/bin/activate

# Install dependensi Python
pip install -r app/PythonScripts/requirements.txt

# Deaktifkan virtual environment
deactivate

Langkah 7: Install & Verifikasi FFmpeg

# Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg -y

# Verifikasi instalasi
ffmpeg -version

Langkah 8: Install Dependensi Frontend (Node.js)

npm install

Langkah 9: Build Assets Frontend

# Untuk development (dengan hot reload)
npm run dev

# Untuk production
npm run build

Langkah 10: Jalankan Aplikasi

Anda perlu menjalankan 3 proses secara bersamaan di terminal terpisah:

Terminal 1 β€” Laravel Development Server:

php artisan serve

Terminal 2 β€” Queue Worker (untuk memproses video di background):

php artisan queue:work --timeout=1800 --tries=1 --memory=512

Terminal 3 β€” Vite Dev Server (untuk hot reload frontend):

npm run dev

πŸ’‘ Alternatif: Jalankan semuanya sekaligus dengan satu perintah:

composer dev

Buka browser dan akses: http://localhost:8000


πŸͺ Bypass Bot Challenge & Limit YouTube

Untuk menghindari error HTTP Error 429: Too Many Requests atau verifikasi bot (Sign in to confirm you're not a bot), Clipper.AI menggunakan pendekatan khusus dengan menyuntikkan cookies browser aktif dan memanfaatkan Javascript Runtime (Node.js).

Langkah Konfigurasi:

  1. Instal Node.js di Sistem: Pastikan Node.js terinstal di sistem Anda. yt-dlp memerlukan Javascript Runtime untuk memecahkan tantangan sandi signature player YouTube.

    node -v
  2. Ekspor Cookies dari Browser:

    • Pasang ekstensi browser seperti Get cookies.txt LOCALLY (tersedia untuk Chrome/Edge/Firefox).
    • Buka YouTube di browser Anda dan pastikan Anda dalam keadaan aktif (login disarankan agar session cookies lebih tahan lama).
    • Klik ikon ekstensi dan pilih Export / Download untuk mendapatkan format Netscape cookies.
    • Simpan file tersebut dengan nama cookies.txt tepat di root direktori proyek Anda (/opt/lampp/htdocs/ai-clipper/cookies.txt).
  3. Keamanan & Otomatisasi:

    • File cookies.txt telah ditambahkan ke .gitignore secara otomatis sehingga aman dan tidak akan pernah ter-push ke GitHub publik Anda.
    • Skrip pipeline (clipper_bot.py) akan mendeteksi keberadaan file cookies.txt di root secara otomatis dan menyuntikkannya ke yt-dlp beserta argumen bypass handal lainnya (--js-runtimes node & --remote-components ejs).

πŸ“– Cara Penggunaan

1. Masukkan Link YouTube

  • Buka halaman utama (http://localhost:8000).
  • Paste URL video YouTube yang ingin di-clip pada kolom input.
  • Klik tombol "Analisis Video" β€” sistem akan mengambil informasi video secara otomatis.

2. Tentukan Timestamp Klip

  • Atur waktu mulai dan waktu selesai untuk setiap klip yang diinginkan.
  • Pilih aspect ratio: Vertikal (9:16) untuk Shorts/Reels/TikTok atau Horizontal (16:9).
  • Anda bisa menambahkan banyak klip sekaligus dari satu video.

3. Mulai Proses

  • Klik tombol "Ekspor Klip Sekarang" untuk memulai pemrosesan.
  • Pantau progress setiap klip secara real-time:
    • πŸ“₯ Downloading (0–20%) β€” Mengunduh segment video dari YouTube.
    • πŸ‘€ Face Tracking (20–55%) β€” AI mendeteksi wajah dan melakukan auto-reframe.
    • πŸ“ Transcribing (55–90%) β€” AI mentranskripsi audio menjadi subtitle.
    • βœ… Completed (100%) β€” Klip siap didownload.

4. Download Hasil

  • Setelah semua klip selesai diproses, klik "Lihat Hasil".
  • Download file video klip (.mp4) dan subtitle (.srt) yang dihasilkan.

πŸ“ Struktur Proyek

ai-clipper/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ Http/Controllers/
β”‚   β”‚   └── VideoController.php      # Controller utama (parse, clip, status)
β”‚   β”œβ”€β”€ Jobs/
β”‚   β”‚   └── ProcessVideoClipJob.php  # Queue job untuk processing video
β”‚   β”œβ”€β”€ Models/
β”‚   β”‚   β”œβ”€β”€ Video.php                # Model video (youtube_url, title, dll)
β”‚   β”‚   └── Clip.php                 # Model klip (timestamp, status, progress)
β”‚   └── PythonScripts/
β”‚       β”œβ”€β”€ clipper_bot.py           # Orchestrator utama pipeline AI
β”‚       β”œβ”€β”€ face_tracker.py          # OpenCV/MediaPipe face tracking & crop
β”‚       β”œβ”€β”€ transcribe.py            # Groq API Whisper transcription
β”‚       β”œβ”€β”€ subtitle_styler.py       # Pembuat subtitle ASS & burn-in FFmpeg
β”‚       └── requirements.txt         # Dependensi Python
β”œβ”€β”€ database/
β”‚   └── migrations/
β”‚       β”œβ”€β”€ create_videos_table.php   # Skema tabel videos
β”‚       └── create_clips_table.php    # Skema tabel clips
β”œβ”€β”€ resources/
β”‚   └── views/
β”‚       β”œβ”€β”€ dashboard.blade.php      # Halaman utama (input URL)
β”‚       β”œβ”€β”€ clip_selector.blade.php  # Halaman pilih timestamp & aspect ratio
β”‚       β”œβ”€β”€ processing.blade.php     # Halaman monitoring progress real-time
β”‚       └── results.blade.php        # Halaman download hasil
β”œβ”€β”€ routes/
β”‚   └── web.php                      # Definisi routes
β”œβ”€β”€ python_venv/                     # Python virtual environment (gitignored)
β”œβ”€β”€ .env.example                     # Template konfigurasi environment
β”œβ”€β”€ composer.json                    # Dependensi PHP
β”œβ”€β”€ package.json                     # Dependensi Node.js
└── vite.config.js                   # Konfigurasi Vite bundler

πŸ› οΈ Tech Stack

Backend

Teknologi Kegunaan
Laravel 13 Framework PHP utama (routing, MVC, queue jobs)
SQLite Database ringan (bisa diganti MySQL/PostgreSQL)
Laravel Queue Background job processing untuk video pipeline

Frontend

Teknologi Kegunaan
Laravel Blade Template engine server-side
Vite Frontend build tool & HMR
Vanilla CSS Styling premium (glassmorphism, gradient, animations)

AI & Video Processing

Teknologi Kegunaan
Python 3 Runtime untuk AI pipeline scripts
OpenCV Face detection (Haar Cascade) & video frame processing
yt-dlp Download video segment dari YouTube
FFmpeg Video transcoding, cutting, audio merging
Groq API Cloud inference Whisper Large V3 (speech-to-text, gratis)

βš™οΈ Konfigurasi Lanjutan

Mengganti Database ke MySQL

Edit file .env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ai_clipper
DB_USERNAME=root
DB_PASSWORD=your_password

Lalu jalankan migrasi ulang:

php artisan migrate:fresh

Queue Worker untuk Production

Untuk environment production, disarankan menggunakan Supervisor agar queue worker selalu berjalan:

# /etc/supervisor/conf.d/ai-clipper-worker.conf

[program:ai-clipper-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/ai-clipper/artisan queue:work --timeout=1800 --tries=1 --memory=512
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/path/to/ai-clipper/storage/logs/worker.log
stopwaitsecs=3600
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start ai-clipper-worker:*

πŸ› Troubleshooting

Job gagal setelah 1 menit

Queue worker memiliki timeout default 60 detik. Pastikan menjalankan dengan flag --timeout=1800:

php artisan queue:work --timeout=1800 --tries=1

Video tidak bisa di-crop (0 frames processed)

Video YouTube kemungkinan dalam codec AV1 yang tidak didukung OpenCV. Sistem sudah memiliki auto-transcode ke H.264, tetapi pastikan FFmpeg terinstall dengan benar:

ffmpeg -codecs | grep libx264

yt-dlp tidak ditemukan

Pastikan yt-dlp terinstall di dalam Python virtual environment:

source python_venv/bin/activate
pip install yt-dlp
deactivate

Groq API error

Pastikan API key valid di file .env. Dapatkan key gratis di console.groq.com/keys.


πŸ“„ Lisensi

Proyek ini dilisensikan di bawah MIT License.


Dibuat dengan ❀️ menggunakan Laravel + Python + OpenCV + Groq AI

# Cliper-AI

About

Platform otomasi video pendek berbasis AI untuk mengubah video YouTube panjang menjadi klip vertikal (9:16) maupun horizontal otomatis dengan fitur robust face tracking (MediaPipe/OpenCV) dan dynamic subtitle burn-in bergaya viral.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors