Download index.html from xandyzap/teste: direct link, hf CLI and curl.
- Browser
- Download file 17.3 kB
-
https://huggingface.co/spaces/xandyzap/teste/resolve/main/index.html
- Command line
-
hf download hf://spaces/xandyzap/teste/index.html
-
curl -L -o index.html https://huggingface.co/spaces/xandyzap/teste/resolve/main/index.html
17.3 kB
| <html lang="pt-BR"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>YT Downloader - Baixe vídeos do YouTube</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| .gradient-bg { | |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| } | |
| .download-btn { | |
| transition: all 0.3s ease; | |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| } | |
| .download-btn:hover { | |
| transform: translateY(-3px); | |
| box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); | |
| } | |
| .pulse { | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| transform: scale(1); | |
| } | |
| 50% { | |
| transform: scale(1.05); | |
| } | |
| 100% { | |
| transform: scale(1); | |
| } | |
| } | |
| .video-preview { | |
| aspect-ratio: 16/9; | |
| background-color: #f3f4f6; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-50 min-h-screen"> | |
| <!-- Header --> | |
| <header class="gradient-bg text-white shadow-lg"> | |
| <div class="container mx-auto px-4 py-6"> | |
| <div class="flex justify-between items-center"> | |
| <div class="flex items-center space-x-2"> | |
| <i class="fab fa-youtube text-3xl"></i> | |
| <h1 class="text-2xl font-bold">YT Downloader</h1> | |
| </div> | |
| <nav> | |
| <ul class="flex space-x-6"> | |
| <li><a href="#" class="hover:text-gray-200 transition">Início</a></li> | |
| <li><a href="#" class="hover:text-gray-200 transition">Como usar</a></li> | |
| <li><a href="#" class="hover:text-gray-200 transition">Sobre</a></li> | |
| </ul> | |
| </nav> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- Main Content --> | |
| <main class="container mx-auto px-4 py-12"> | |
| <section class="max-w-4xl mx-auto text-center mb-16"> | |
| <h2 class="text-4xl font-bold text-gray-800 mb-4">Baixe vídeos do YouTube gratuitamente</h2> | |
| <p class="text-xl text-gray-600 mb-8">Cole o link do vídeo abaixo e baixe em diversos formatos e qualidades</p> | |
| <!-- Download Form --> | |
| <div class="bg-white rounded-xl shadow-xl p-6 mb-12"> | |
| <div class="flex flex-col md:flex-row gap-4"> | |
| <input | |
| type="text" | |
| id="videoUrl" | |
| placeholder="https://www.youtube.com/watch?v=..." | |
| class="flex-grow px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500" | |
| > | |
| <button | |
| id="fetchBtn" | |
| class="download-btn text-white px-6 py-3 rounded-lg font-semibold flex items-center justify-center space-x-2" | |
| > | |
| <i class="fas fa-search"></i> | |
| <span>Buscar</span> | |
| </button> | |
| </div> | |
| <div id="errorMsg" class="text-red-500 mt-2 text-left hidden"></div> | |
| </div> | |
| <!-- Video Preview --> | |
| <div id="videoContainer" class="hidden"> | |
| <div class="bg-white rounded-xl shadow-xl overflow-hidden mb-8"> | |
| <div class="video-preview flex items-center justify-center" id="videoThumbnail"> | |
| <i class="fas fa-play-circle text-5xl text-gray-400"></i> | |
| </div> | |
| <div class="p-6"> | |
| <h3 id="videoTitle" class="text-2xl font-bold text-gray-800 mb-2"></h3> | |
| <p id="videoDuration" class="text-gray-600 mb-4"></p> | |
| <!-- Download Options --> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mt-6"> | |
| <!-- MP4 720p --> | |
| <div class="bg-gray-100 p-4 rounded-lg"> | |
| <div class="flex items-center justify-between mb-2"> | |
| <span class="font-semibold">MP4 (720p)</span> | |
| <i class="fas fa-video text-purple-600"></i> | |
| </div> | |
| <button class="download-option download-btn text-white w-full py-2 rounded-lg font-medium" data-quality="720"> | |
| <i class="fas fa-download mr-2"></i> Baixar | |
| </button> | |
| </div> | |
| <!-- MP4 480p --> | |
| <div class="bg-gray-100 p-4 rounded-lg"> | |
| <div class="flex items-center justify-between mb-2"> | |
| <span class="font-semibold">MP4 (480p)</span> | |
| <i class="fas fa-video text-purple-600"></i> | |
| </div> | |
| <button class="download-option download-btn text-white w-full py-2 rounded-lg font-medium" data-quality="480"> | |
| <i class="fas fa-download mr-2"></i> Baixar | |
| </button> | |
| </div> | |
| <!-- MP3 --> | |
| <div class="bg-gray-100 p-4 rounded-lg"> | |
| <div class="flex items-center justify-between mb-2"> | |
| <span class="font-semibold">MP3 (Áudio)</span> | |
| <i class="fas fa-music text-purple-600"></i> | |
| </div> | |
| <button class="download-option download-btn text-white w-full py-2 rounded-lg font-medium" data-quality="mp3"> | |
| <i class="fas fa-download mr-2"></i> Baixar | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Features --> | |
| <section class="max-w-6xl mx-auto mb-16"> | |
| <h2 class="text-3xl font-bold text-center text-gray-800 mb-12">Por que usar nosso downloader?</h2> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-8"> | |
| <div class="bg-white p-6 rounded-xl shadow-md hover:shadow-xl transition"> | |
| <div class="text-purple-600 mb-4"> | |
| <i class="fas fa-bolt text-4xl"></i> | |
| </div> | |
| <h3 class="text-xl font-semibold mb-2">Rápido e fácil</h3> | |
| <p class="text-gray-600">Baixe vídeos em poucos segundos com nossa interface simples e intuitiva.</p> | |
| </div> | |
| <div class="bg-white p-6 rounded-xl shadow-md hover:shadow-xl transition"> | |
| <div class="text-purple-600 mb-4"> | |
| <i class="fas fa-shield-alt text-4xl"></i> | |
| </div> | |
| <h3 class="text-xl font-semibold mb-2">Seguro</h3> | |
| <p class="text-gray-600">Não armazenamos seus vídeos ou dados pessoais. Totalmente seguro.</p> | |
| </div> | |
| <div class="bg-white p-6 rounded-xl shadow-md hover:shadow-xl transition"> | |
| <div class="text-purple-600 mb-4"> | |
| <i class="fas fa-mobile-alt text-4xl"></i> | |
| </div> | |
| <h3 class="text-xl font-semibold mb-2">Multiplataforma</h3> | |
| <p class="text-gray-600">Funciona em qualquer dispositivo: computador, tablet ou smartphone.</p> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- How to Use --> | |
| <section class="max-w-4xl mx-auto bg-white rounded-xl shadow-md p-8"> | |
| <h2 class="text-3xl font-bold text-center text-gray-800 mb-8">Como baixar vídeos?</h2> | |
| <div class="space-y-6"> | |
| <div class="flex items-start"> | |
| <div class="bg-purple-100 text-purple-800 rounded-full w-8 h-8 flex items-center justify-center mr-4 mt-1 flex-shrink-0"> | |
| <span class="font-bold">1</span> | |
| </div> | |
| <div> | |
| <h3 class="text-lg font-semibold mb-1">Copie o link do vídeo</h3> | |
| <p class="text-gray-600">Vá até o YouTube, encontre o vídeo que deseja baixar e copie o link da barra de endereços.</p> | |
| </div> | |
| </div> | |
| <div class="flex items-start"> | |
| <div class="bg-purple-100 text-purple-800 rounded-full w-8 h-8 flex items-center justify-center mr-4 mt-1 flex-shrink-0"> | |
| <span class="font-bold">2</span> | |
| </div> | |
| <div> | |
| <h3 class="text-lg font-semibold mb-1">Cole o link acima</h3> | |
| <p class="text-gray-600">Volte para esta página e cole o link do vídeo no campo indicado.</p> | |
| </div> | |
| </div> | |
| <div class="flex items-start"> | |
| <div class="bg-purple-100 text-purple-800 rounded-full w-8 h-8 flex items-center justify-center mr-4 mt-1 flex-shrink-0"> | |
| <span class="font-bold">3</span> | |
| </div> | |
| <div> | |
| <h3 class="text-lg font-semibold mb-1">Escolha o formato</h3> | |
| <p class="text-gray-600">Selecione a qualidade desejada (MP4 720p, 480p ou MP3) e clique em baixar.</p> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| </main> | |
| <!-- Footer --> | |
| <footer class="bg-gray-800 text-white py-12"> | |
| <div class="container mx-auto px-4"> | |
| <div class="flex flex-col md:flex-row justify-between items-center"> | |
| <div class="mb-6 md:mb-0"> | |
| <div class="flex items-center space-x-2"> | |
| <i class="fab fa-youtube text-2xl"></i> | |
| <span class="text-xl font-bold">YT Downloader</span> | |
| </div> | |
| <p class="mt-2 text-gray-400">O melhor downloader de vídeos do YouTube</p> | |
| </div> | |
| <div class="flex space-x-6"> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-facebook-f"></i></a> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-twitter"></i></a> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-instagram"></i></a> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-github"></i></a> | |
| </div> | |
| </div> | |
| <div class="border-t border-gray-700 mt-8 pt-8 text-center text-gray-400"> | |
| <p>© 2023 YT Downloader. Todos os direitos reservados.</p> | |
| <p class="mt-2 text-sm">Este site não hospeda nenhum vídeo em seus servidores. Todos os vídeos pertencem a seus respectivos proprietários.</p> | |
| </div> | |
| </div> | |
| </footer> | |
| <script> | |
| document.addEventListener('DOMContentLoaded', function() { | |
| const videoUrlInput = document.getElementById('videoUrl'); | |
| const fetchBtn = document.getElementById('fetchBtn'); | |
| const videoContainer = document.getElementById('videoContainer'); | |
| const errorMsg = document.getElementById('errorMsg'); | |
| const videoTitle = document.getElementById('videoTitle'); | |
| const videoDuration = document.getElementById('videoDuration'); | |
| const videoThumbnail = document.getElementById('videoThumbnail'); | |
| const downloadOptions = document.querySelectorAll('.download-option'); | |
| // Mock data for demonstration | |
| const mockVideoData = { | |
| title: "Como criar um site incrível com HTML e CSS", | |
| duration: "12:34", | |
| thumbnail: "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", | |
| videoId: "dQw4w9WgXcQ" | |
| }; | |
| // Validate YouTube URL | |
| function isValidYouTubeUrl(url) { | |
| const pattern = /^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/; | |
| return pattern.test(url); | |
| } | |
| // Fetch video info (mock for this example) | |
| function fetchVideoInfo(url) { | |
| return new Promise((resolve, reject) => { | |
| // In a real app, you would make an API call here | |
| setTimeout(() => { | |
| if (isValidYouTubeUrl(url)) { | |
| resolve(mockVideoData); | |
| } else { | |
| reject(new Error("URL do YouTube inválida")); | |
| } | |
| }, 1000); | |
| }); | |
| } | |
| // Handle fetch button click | |
| fetchBtn.addEventListener('click', async function() { | |
| const url = videoUrlInput.value.trim(); | |
| if (!url) { | |
| errorMsg.textContent = "Por favor, insira um URL do YouTube"; | |
| errorMsg.classList.remove('hidden'); | |
| return; | |
| } | |
| if (!isValidYouTubeUrl(url)) { | |
| errorMsg.textContent = "URL do YouTube inválida. Use um link como: https://www.youtube.com/watch?v=..."; | |
| errorMsg.classList.remove('hidden'); | |
| return; | |
| } | |
| errorMsg.classList.add('hidden'); | |
| fetchBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> <span>Processando...</span>'; | |
| fetchBtn.classList.add('opacity-75'); | |
| try { | |
| const videoInfo = await fetchVideoInfo(url); | |
| // Display video info | |
| videoTitle.textContent = videoInfo.title; | |
| videoDuration.textContent = `Duração: ${videoInfo.duration}`; | |
| videoThumbnail.style.backgroundImage = `url(${videoInfo.thumbnail})`; | |
| videoThumbnail.innerHTML = ''; | |
| // Set download links (in a real app, these would point to your backend) | |
| downloadOptions.forEach(option => { | |
| const quality = option.getAttribute('data-quality'); | |
| option.onclick = function() { | |
| // This is just for demonstration | |
| alert(`Iniciando download do vídeo em ${quality}p...\n\nEm uma aplicação real, isso enviaria para um backend que processaria o download.`); | |
| // Simulate download (would be replaced with actual download logic) | |
| setTimeout(() => { | |
| alert("Download concluído com sucesso!"); | |
| }, 2000); | |
| }; | |
| }); | |
| videoContainer.classList.remove('hidden'); | |
| } catch (error) { | |
| errorMsg.textContent = error.message; | |
| errorMsg.classList.remove('hidden'); | |
| } finally { | |
| fetchBtn.innerHTML = '<i class="fas fa-search"></i> <span>Buscar</span>'; | |
| fetchBtn.classList.remove('opacity-75'); | |
| } | |
| }); | |
| // Allow pressing Enter in the input field | |
| videoUrlInput.addEventListener('keypress', function(e) { | |
| if (e.key === 'Enter') { | |
| fetchBtn.click(); | |
| } | |
| }); | |
| // Pulse animation for the download button | |
| setInterval(() => { | |
| fetchBtn.classList.toggle('pulse'); | |
| }, 5000); | |
| }); | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=xandyzap/teste" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |