Adibrino's picture
Start
1038d6b
metadata
title: PPT BUDAYA INDONESIA HTML CONTROL LOGIC
emoji: πŸ“š
colorFrom: indigo
colorTo: indigo
app_build_command: npm run build
app_file: dist/index.html
sdk: static
pinned: false
license: apache-2.0
short_description: 'Warna-Warni Nusantara​: Menyelami Kekayaan Budaya Indonesia​'

Interactive Video Presentation Controller

React TypeScript Python OpenCV License

Sebuah sistem presentasi video interaktif dengan mode "Controller" dan "Preview" yang disinkronkan secara real-time menggunakan GitHub Gist API.

Tema Presentasi: "Warna-Warni Nusantara: Menyelami Kekayaan Budaya Indonesia"

(Tautan Demo Langsung di Hugging Face Spaces)


Konsep

Proyek ini memecahkan masalah presentasi jarak jauh di mana seorang presenter perlu mengontrol pemutaran video di layar audiens secara mulus. Ini dicapai dengan:

  1. Pra-pemrosesan Video: Sebuah skrip Python menggunakan OpenCV untuk memotong video presentasi utama menjadi segmen-segmen kecil, baik untuk pemutaran maju (real) maupun mundur (reverse).
  2. Frontend Cerdas: Aplikasi React yang melakukan pra-pemuatan (pre-loads) semua segmen video untuk transisi yang instan dan bebas kedipan.
  3. Sinkronisasi Real-time:
    • Mode Controller: Digunakan oleh presenter. Memiliki kontrol penuh (maju, mundur, lompat segmen) dan menyimpan status halaman saat ini ke GitHub Gist setiap kali ada perubahan.
    • Mode Preview: Digunakan oleh audiens. Secara berkala mengambil (polls) status terbaru dari GitHub Gist dan secara otomatis memutar segmen video yang sesuai.

Fitur Utama

  • Transisi Video Super Mulus: Menggunakan teknik triple-buffering dengan 3 elemen video untuk menghilangkan kedipan saat berpindah segmen.
  • Pra-pemuatan Cerdas: Semua segmen video diunduh terlebih dahulu saat aplikasi dimuat, memastikan tidak ada buffering saat presentasi.
  • Dua Mode Operasi: Mode controller untuk presenter dan mode preview untuk audiens.
  • Navigasi Penuh: Kontrol maju, mundur, lompat ke segmen tertentu, dan skip.
  • Kontrol Keyboard: Navigasi menggunakan tombol panah (ArrowLeft, ArrowRight) di mode controller.
  • Backend Ringan: Menggunakan GitHub Gist sebagai database real-time yang sederhana dan gratis.

Tumpukan Teknologi

  • Backend & Pemrosesan Video:
    • Python
    • OpenCV
    • tqdm
  • Frontend:
    • React
    • TypeScript
    • Vite (diasumsikan)
  • Sinkronisasi:
    • GitHub Gist API

Struktur Proyek

.
β”œβ”€β”€ python/                 # Skrip untuk pemrosesan video
β”‚   β”œβ”€β”€ assets/             # Tempat menaruh video sumber (real & reverse)
β”‚   β”œβ”€β”€ results/            # Folder output untuk segmen video (diabaikan oleh Git)
β”‚   └── cut_video.py        # Skrip utama untuk memotong video
β”œβ”€β”€ public/                 # Aset statis untuk aplikasi React
β”‚   └── assets/            # Folder hasil pemotongan video HARUS dipindahkan ke sini
β”œβ”€β”€ src/                    # Kode sumber aplikasi React
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ Player.tsx      # Komponen inti pemutar video
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ services/
β”‚   β”‚   └── githubService.ts# Logika untuk interaksi dengan API Gist
β”‚   β”œβ”€β”€ App.tsx             # Komponen utama yang menangani preloading
β”‚   └── types.ts            # Definisi tipe TypeScript
β”œβ”€β”€ .env.example            # Template untuk variabel lingkungan
β”œβ”€β”€ .gitignore              # Mengabaikan file yang tidak perlu
└── README.md               # Anda sedang membaca ini

Panduan Instalasi dan Penggunaan

Proses ini terdiri dari dua bagian utama: mempersiapkan segmen video dan menjalankan aplikasi web.

Bagian 1: Mempersiapkan Segmen Video (Python)

Langkah ini hanya perlu dilakukan sekali atau setiap kali Anda memiliki video sumber baru.

  1. Prasyarat: Pastikan Anda memiliki Python 3.x dan pip terinstal.
  2. Instal Dependensi: Buka terminal di dalam folder python/ dan instal pustaka yang diperlukan.
    pip install opencv-python tqdm
    
  3. Siapkan Video Sumber:
    • Letakkan video presentasi utama Anda di dalam folder python/assets/ dengan nama ppt_real.mp4.
    • Letakkan versi terbalik dari video tersebut di dalam folder yang sama dengan nama ppt_reverse.mp4.
  4. Jalankan Skrip: Jalankan skrip pemotongan video dari direktori root proyek.
    python python/cut_video.py
    
    Skrip ini akan membuat folder python/results/ yang berisi semua segmen video .mp4 yang sudah dipotong.

Bagian 2: Menjalankan Aplikasi Web (React)

  1. Pindahkan Aset Video: Langkah Krusial! Pindahkan folder results yang baru saja dibuat dari dalam python/ ke dalam folder public/. Struktur akhir harus menjadi public/results/.

    public/
    └── results/
        β”œβ”€β”€ real/
        β”‚   β”œβ”€β”€ 0.mp4
        β”‚   └── ...
        └── reverse/
            β”œβ”€β”€ 0.mp4
            └── ...
    
  2. Prasyarat: Pastikan Anda memiliki Node.js dan npm (atau yarn) terinstal.

  3. Instal Dependensi Frontend: Buka terminal di direktori root proyek dan jalankan:

    npm install
    
  4. Konfigurasi Variabel Lingkungan:

    • Buat file bernama .env di direktori root proyek.
    • Salin konten dari .env.example ke dalam .env.
    • Isi file .env dengan kredensial Anda:
      VITE_GIST_ID=ID_GIST_ANDA
      VITE_GITHUB_TOKEN=TOKEN_AKSES_PRIBADI_GITHUB_ANDA
      
    • VITE_GIST_ID: ID dari Gist publik/rahasia yang akan Anda gunakan sebagai database.
    • VITE_GITHUB_TOKEN: Personal Access Token (PAT) dari GitHub dengan izin (scope) untuk gist.
  5. Jalankan Server Pengembangan:

    npm run dev
    

    Buka browser Anda dan kunjungi http://localhost:5173 (atau port yang ditampilkan).

  6. Build untuk Produksi:

    npm run build
    

    Hasilnya akan ada di dalam folder dist/, yang siap untuk di-deploy.

Cara Menggunakan

  • Mode Preview (Audiens): Cukup buka aplikasi. Ini adalah mode default. Layar akan secara pasif menunggu pembaruan dari Gist.
  • Mode Controller (Presenter):
    1. Klik tombol "Mode" atau ikon sejenisnya.
    2. Login (jika ada implementasi login).
    3. Sekarang Anda berada di mode controller. Gunakan tombol ⟨ dan ⟩ di layar atau tombol panah keyboard untuk bernavigasi. Setiap perubahan akan secara otomatis disimpan ke Gist, dan layar audiens akan mengikutinya.

Lisensi

Proyek ini dilisensikan di bawah Lisensi Apache 2.0. Lihat file LICENSE untuk detailnya.

Copyright

Β© 2025 Aditya Dwi Nugraha. All Rights Reserved.