Lunos logoLunos

Multimodal Input Video

Lunos mendukung input video untuk model yang kompatibel melalui API Chat Completions. Video dapat dikirimkan dalam dua cara: menggunakan URL publik atau data URL Base64.

  • Gunakan URL video jika file Anda bisa diakses secara publik dan provider model yang dipilih mendukung input video berbasis URL.
  • Gunakan data URL Base64 untuk file lokal, aset privat, atau provider yang tidak menerima tautan video langsung.

Catatan: Dukungan terhadap URL video bersifat spesifik per provider. Pada beberapa rute model Gemini, hanya tautan YouTube yang diterima, sedangkan rute lainnya mewajibkan format Base64.

Endpoint

POST /v1/chat/completions

Format Konten Video

Sertakan video di dalam array content dengan tipe "video_url":

{
  "type": "video_url",
  "video_url": {
    "url": "https://example.com/video.mp4"
  }
}

Hanya model yang memiliki kapabilitas input video yang bisa memproses payload ini. Pastikan metadata model tersebut memiliki "video" di dalam properti inputModalities.

Mengirim Video Menggunakan URL

curl -X POST "https://api.lunos.tech/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-2.5-flash",
    "messages": [
      {
        "role": "user",
        "content": [
          { "type": "text", "text": "Jelaskan apa yang terjadi pada video ini." },
          { "type": "video_url", "video_url": { "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" } }
        ]
      }
    ]
  }'
import requests

payload = {
    "model": "google/gemini-2.5-flash",
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Jelaskan apa yang terjadi pada video ini."},
                {
                    "type": "video_url",
                    "video_url": {"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"},
                },
            ],
        }
    ],
}
response = requests.post(
    "https://api.lunos.tech/v1/chat/completions",
    headers={
        "Authorization": "Bearer YOUR_SECRET_KEY",
        "Content-Type": "application/json",
    },
    json=payload,
)
print(response.json())
const response = await fetch("https://api.lunos.tech/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_SECRET_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "google/gemini-2.5-flash",
    messages: [
      {
        role: "user",
        content: [
          { type: "text", text: "Jelaskan apa yang terjadi pada video ini." },
          {
            type: "video_url",
            video_url: { url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },
          },
        ],
      },
    ],
  }),
});
console.log(await response.json());

Mengirim Video Menggunakan Data URL Base64

Gunakan metode ini untuk file video lokal/pribadi, atau saat provider model tidak mendukung URL video langsung.

Python

import base64
import requests

def encode_video(path):
    with open(path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")

base64_video = encode_video("path/to/video.mp4")
data_url = f"data:video/mp4;base64,{base64_video}"

payload = {
    "model": "google/gemini-2.5-flash",
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Apa yang terlihat dalam video ini?"},
                {"type": "video_url", "video_url": {"url": data_url}},
            ],
        }
    ],
}

response = requests.post(
    "https://api.lunos.tech/v1/chat/completions",
    headers={
        "Authorization": "Bearer YOUR_SECRET_KEY",
        "Content-Type": "application/json",
    },
    json=payload,
)

print(response.json())

TypeScript

import { readFile } from "node:fs/promises";

async function encodeVideo(path: string) {
  const buffer = await readFile(path);
  return `data:video/mp4;base64,${buffer.toString("base64")}`;
}

const dataUrl = await encodeVideo("path/to/video.mp4");

const response = await fetch("https://api.lunos.tech/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_SECRET_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "google/gemini-2.5-flash",
    messages: [
      {
        role: "user",
        content: [
          { type: "text", text: "Apa yang terlihat dalam video ini?" },
          { type: "video_url", video_url: { url: dataUrl } },
        ],
      },
    ],
  }),
});

console.log(await response.json());

Format Video yang Didukung

  • video/mp4
  • video/mpeg
  • video/mov
  • video/webm

Contoh Penggunaan Umum

  • Membuat ringkasan isi video secara otomatis.
  • Mendeteksi aktivitas dan objek yang muncul dalam video.
  • Memahami konteks adegan dan lingkungan (scene understanding).
  • Menganalisis cuplikan pertandingan olahraga.
  • Meninjau rekaman pengawasan (CCTV).
  • Mengekstrak informasi penting dari konten video edukasi.

Praktik Terbaik (Best Practices)

Ukuran File dan Biaya

  • Lakukan kompresi video jika memungkinkan untuk menghemat biaya dan mempercepat proses.
  • Potong video dan kirimkan hanya segmen yang relevan dengan pertanyaan Anda.
  • Gunakan resolusi yang efisien (misalnya 720p sudah cukup untuk sebagian besar analisis umum).
  • Kurangi frame rate jika detail temporal tinggi tidak diperlukan.

Durasi Video

  • Setiap model memiliki batas durasi maksimum yang berbeda — pastikan Anda memeriksa terlebih dahulu.
  • Untuk video yang panjang, bagi menjadi beberapa klip pendek yang lebih mudah diproses.
  • Fokuskan prompt teks Anda pada momen-momen spesifik yang ingin dianalisis.

Kompromi Kualitas vs Efisiensi

  • Kualitas tinggi sangat cocok untuk deteksi detail halus dan pembacaan teks kecil di dalam video.
  • Kualitas menengah sudah cukup memadai untuk sebagian besar kebutuhan analisis umum.
  • Kualitas rendah masih bisa digunakan untuk ringkasan adegan atau identifikasi aksi pada level tinggi (high-level).

Dukungan URL Spesifik Per Provider

  • Dukungan URL bersifat spesifik per provider dan bisa berbeda bahkan di antara model dari keluarga yang sama.
  • Beberapa rute hanya menerima video dari host tertentu (misalnya hanya YouTube).
  • Jika pengiriman menggunakan URL gagal diproses, gunakan metode data URL Base64 sebagai alternatif.

Panduan Penanganan Masalah (Troubleshooting)

Video Tidak Dapat Diproses

  • Pastikan model yang Anda pilih memiliki "video" pada atribut inputModalities.
  • Pastikan rute provider model tersebut mendukung input video via URL.
  • Untuk rute Gemini AI Studio, sangat disarankan untuk menggunakan tautan YouTube.
  • Jika pengiriman URL langsung gagal, coba kirim ulang menggunakan data URL Base64.
  • Periksa kembali bahwa format file video didukung dan file tidak rusak (corrupt).

Error Payload Terlalu Besar atau Timeout

  • Lakukan kompresi video, potong durasi, atau turunkan resolusi dan frame rate.
  • Periksa batasan ukuran dan durasi yang diterapkan oleh provider model terkait.
  • Jika provider mendukungnya, gunakan URL untuk file publik berukuran besar.

Hasil Analisis Kurang Akurat

  • Tingkatkan kualitas video atau pastikan pencahayaan sudah memadai.
  • Gunakan prompt teks yang lebih spesifik dan mendetail.
  • Kirimkan klip yang lebih pendek dan berfokus pada kejadian penting yang ingin dianalisis.