(01) Pengunduh TikTok · Instagram segera hadir
Tempel link, unduh.
Video TikTok tanpa watermark, lengkap dengan audio dan slideshow foto. Tanpa akun, tanpa aplikasi tambahan.
Mengambil data media…
Tiga langkah
(03)Salin link
Di TikTok, buka videonya, tekan Bagikan, lalu Salin Tautan.
Tempel dan unduh
Tempel ke kolom di atas atau tekan Tempel, lalu tekan Unduh.
Pilih format
Pilih MP4 HD, MP4 SD, MP3, atau foto slide, lalu tekan Tautan langsung untuk menyimpan.
Yang didukung
(04)TikTok
Video tanpa watermark dalam HD dan SD, versi dengan watermark, audio, cover, dan slideshow foto.
Segera hadir. Reels dan postingan dari akun publik sedang disiapkan.
Riwayat
Pertanyaan
(05)DMCA & Privasi
DMCASNAPP.UI tidak menyimpan atau menghosting video, foto, maupun audio. Semua file tetap berada di server platform asalnya dan hak ciptanya milik pemegang aslinya.
Pemegang hak cipta yang ingin mengajukan permintaan penghapusan (takedown) dapat menghubungi kami lewat WhatsApp dengan menyertakan tautan konten, bukti kepemilikan, dan kontak Anda. Kami akan menanggapi secepatnya.
Privasi: tanpa akun dan tanpa pelacak. Riwayat unduhan hanya tersimpan di browser perangkatmu dan bisa dihapus kapan saja. Gunakan layanan ini hanya untuk konten milikmu atau yang kamu punya izinnya.
Untuk pengembang: contoh backend
Halaman ini butuh server yang membaca halaman publik TikTok (Instagram menyusul), lalu mengambil tautan file MP4 dari CDN mereka. Pilih contoh yang sesuai.
const express = require('express');
const axios = require('axios');
const cors = require('cors');
const app = express();
app.use(cors());
app.use(express.json());
// Endpoint Downloader TikTok & Instagram
app.post('/api/download', async (req, res) => {
const { url } = req.body;
if (!url || (!url.includes('tiktok.com') && !url.includes('instagram.com'))) {
return res.status(400).json({ success: false, message: 'URL tidak valid' });
}
try {
// Menggunakan API Scraper TikWM untuk TikTok
const response = await axios.post('https://www.tikwm.com/api/', new URLSearchParams({
url: url,
hd: 1
}), {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
const data = response.data.data;
if (!data) {
return res.status(404).json({ success: false, message: 'Gagal mengekstrak media' });
}
// Return JSON Terstruktur ke Frontend
res.json({
success: true,
platform: 'TikTok',
id: data.id,
title: data.title,
author: `@${data.author.unique_id}`,
authorName: data.author.nickname,
avatar: data.author.avatar,
cover: data.cover,
videoNoWatermark: data.play, // Direct CDN MP4 tanpa watermark
videoWatermark: data.wmplay,
audio: data.music,
stats: { likes: data.digg_count, views: data.play_count, shares: data.share_count }
});
} catch (error) {
console.error('Extraction Error:', error.message);
res.status(500).json({ success: false, message: 'Server scraping error' });
}
});
// Endpoint Instagram (postingan publik, via halaman embed)
app.get('/api/instagram', async (req, res) => {
const m = (req.query.url || '').match(/(?:p|reel|reels|tv)\/([A-Za-z0-9_-]+)/);
if (!m) return res.status(400).json({ success: false, message: 'Link Instagram tidak valid' });
const unesc = (t) => t.replace(/\\u0026/g, '&').replace(/\\\//g, '/');
try {
const { data: html } = await axios.get(`https://www.instagram.com/p/${m[1]}/embed/captioned/`, {
headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36' }
});
const video = html.match(/video_url\\?":\\?"([^"\\]+)/);
const img = html.match(/class="EmbeddedMediaImage"[^\x3E]*src="([^"]+)"/);
const user = html.match(/class="UsernameText"[^\x3E]*>([^\x3C]+)/);
const mediaUrl = video ? unesc(video[1]) : (img ? img[1].replace(/&/g, '&') : null);
if (!mediaUrl) return res.status(404).json({ success: false, message: 'Media tidak ditemukan / akun privat' });
res.json({
success: true, id: m[1],
author: user ? '@' + user[1].trim() : '@instagram',
thumbnail: img ? img[1].replace(/&/g, '&') : null,
items: [{ url: mediaUrl, type: video ? 'video' : 'image' }]
});
} catch (e) {
res.status(500).json({ success: false, message: 'Server scraping error' });
}
});
app.listen(5000, () => console.log('⚡ Server Downloader aktif di port 5000!'));
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import yt_dlp
app = FastAPI(title="SNAPP.UI Media Extractor")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
class DownloadRequest(BaseModel):
url: str
@app.post("/api/download")
def extract_media(req: DownloadRequest):
ydl_opts = {
'format': 'best',
'quiet': True,
'no_warnings': True,
}
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(req.url, download=False)
return {
"success": True,
"platform": info.get('extractor_key'),
"id": info.get('id'),
"title": info.get('title'),
"author": f"@{info.get('uploader')}",
"cover": info.get('thumbnail'),
"videoNoWatermark": info.get('url'), # Direct CDN Stream URL
"audio": info.get('url')
}
except Exception as e:
raise HTTPException(status_code=400, detail=f"Scraping failed: {str(e)}")
# Jalankan server: uvicorn main_fastapi:app --reload --port 5000