import { io } from "socket.io-client"; import React, { useState, useEffect } from "react"; import { Container, Row, Col, ProgressBar, InputGroup, FormControl, Button, Toast } from "react-bootstrap"; import { validateDomain, validateIP } from "./utils"; import './App.css'; const socket = io(`http://${localStorage.getItem('server-addr') || 'localhost'}:3022`) export function App() { const [progress, setProgress] = useState(0) const [message, setMessage] = useState('') const [halt, setHalt] = useState(false) const [url, setUrl] = useState('') const [showToast, setShowToast] = useState(false) const [invalidIP, setInvalidIP] = useState(false) const [showSettings, setShowSettings] = useState(false) useEffect(() => { socket.on('connect', () => { setShowToast(true) }) }, []) useEffect(() => { socket.on('progress', data => { setMessage(data.trim()) if (data.trim() === 'Done!') { setHalt(false) setProgress(0) } try { const _progress = Math.ceil(data.split(" ")[2].replace('%', '')) if (!isNaN(_progress)) { setProgress(_progress) } } catch (error) { console.log('finished or empty url or aborted') } }) }, []) const sendUrl = () => { setHalt(true) console.log(url) socket.emit('send-url', url) } const handleUrlChange = (e) => { setUrl(e.target.value) } const handleAddrChange = (e) => { const input = e.target.value; if (validateIP(input)) { setInvalidIP(false) localStorage.setItem('server-addr', input) } else if (validateDomain(input)) { setInvalidIP(false) localStorage.setItem('server-addr', input) } else { setInvalidIP(true) } } const abort = () => { socket.emit('abort') setHalt(false) } return (

yt-dlp Web UI 🤠

Status
{message}
{progress ? : null} {' '} {' '} {showSettings ? <>
Server address
ws:// :3022 : null }
Once you close the page the download will continue in the background.
It won't be possible retriving the progress though.
Made with ❤️ by Marcobaobao setShowToast(false)} bg={'success'} delay={1500} autohide className="mt-5" > Server Now {`Connected to ${localStorage.getItem('server-addr')}`} ) }